由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[Home isEqualToString:]

Posted

技术标签:

【中文标题】由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[Home isEqualToString:]【英文标题】:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Home isEqualToString:] 【发布时间】:2013-04-23 10:49:47 【问题描述】:

我正在从网络服务获取数据:

//temp1 is NSDictionary
//responseArr1 is NSMutableArray
for(temp1 in responseArr1)......., 

     quesTxt = [[temp1 objectForKey:@"question_text"] stringByReplacingOccurrencesOfString:@"%PROFILENAME%" withString:del.onlyFirstName];

     quesID = [temp1 objectForKey:@"idlife_stage_question"];

     Home *objHome=[[Home alloc] init];

     objHome.homeQuesTxt = quesTxt;
     objHome.homeQuesID = quesID;

     [quesArray addObject:objHome];

     //[quesArray addObject:[[temp1 objectForKey:@"question_text"] stringByReplacingOccurrencesOfString:@"%PROFILENAME%" withString:del.onlyFirstName]];//this works fine

        

我尝试在选择器视图中填充的所有日期都会出现异常。

选择器视图委托:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 
    UILabel *retval = (id)view;
    if (!retval) 
        retval= [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)];
    

    retval.text = [quesArray objectAtIndex:row];.........// **EXCEPTION HERE**...

    retval.font = [UIFont boldSystemFontOfSize:14];
    retval.numberOfLines = 3;

    return retval;

我的网络服务示例:


        "idlife_stage_question" = 35;
        "life_stage_idlife_stage" = 1;
        "profile_idprofile" = 0;
        "question_text" = "When %PROFILENAME% first smiled?";..//%PROFILENAME% replaces with user name which i have
        sequence = 34;
    

Home 是 NSObject 的子类

请帮忙。

【问题讨论】:

在代码中设置断点并跟踪正确的崩溃点?向我们显示崩溃代码... 您的 Label.text 是一个字符串,您正在为其分配一个对象。 我同意@nsgulliver @nsgulliver:即使我同意,这也是我刚刚回答的:) 我已经提到了 retval.text = [quesArray objectAtIndex:row];.........// EXCEPTION HERE... 【参考方案1】:
retval.text = [quesArray objectAtIndex:row];

你在这里访问quesArray

如:[quesArray addObject:objHome];

而 objHome 是:Home *objHome=[[Home alloc] init];

所以你的错误就在这里,你试图将对象放入 retval 中,它需要 NSString

你需要使用一些东西:

retval.text = [[quesArray objectAtIndex:row] homeQuesTxt]; //or anyother property that you want to show in text

【讨论】:

嘿,Anoop,这对我有帮助,但我还需要在数组中插入一个自定义行,每次都会在数组末尾显示..我该怎么做? @user2268539:数组中的自定义行是什么?你想在那里添加一些文字吗? 是的...比如“创建您自己的问题” 但我使用 [[quesArray objectAtIndex:row] homeQuesTxt]?? 在选取器中显示数据 uipicker为view,需要在model中添加。【参考方案2】:
retval.text = [quesArray objectAtIndex:row];

您的retval.text 是一个字符串,您正在为其分配一个对象

你可以这样做

 Home  *newHome=[quesArray objectAtIndex:row];

  retval.text=newHome.homeQuesTxt;

【讨论】:

谢谢,现在它显示数据,但是当我滚动选择器时,它会引发另一个异常:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[__NSCFConstantString homeQuesTxt]:无法识别的选择器发送到实例 0x1e72a8 这里..retval.text=newHome.homeQuesTxt; 检查你如何定义 homeQuesTxt。 在 Home 类中像这样..@property(nonatomic,strong)NSString *homeQuesTxt; 您应该调试您的代码或设置断点,在分配之前尝试将值转换为 (NSString*)。还要检查你的标签没有被释放。【参考方案3】:

quesArray 填充有 Home 对象

Home *home = quesArray[row];
retval.text = home.homeQuesTxt;

【讨论】:

以上是关于由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[Home isEqualToString:]的主要内容,如果未能解决你的问题,请参考以下文章

由于未捕获的异常而终止应用程序 [UIImageView _isResizable]

由于未捕获的异常而终止应用程序,同时加载视图

由于未捕获的异常“NSInternalInconsistencyException”错误而终止应用程序

“由于未捕获的异常而终止应用程序”在推送视图控制器时崩溃

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序