得到异常' NSInvalidArgumentException',原因:' - [__ NSCFString stringValue]

时间:2015-08-07 05:42:07

标签: ios tableview afnetworking viewcontroller

我已经准备好通过谷歌尝试多种解决方案,但我得到两种错误,解决方案我得到了这个

  

2015-08-06 18:52:33.110 FastFast [2824:110493] *由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [__ NSCFString stringValue]:无法识别的选择器发送到实例0x7f89c1eb7e50'   * 首先抛出调用堆栈:

但是当我没有应用任何解决方案时,我得到了这个

  

2015-08-06 19:09:24.473 FastFast [2933:117451] - [__ NSCFNumber length]:无法识别的选择器发送到实例0xb000000000000003   2015-08-06 19:09:24.480 FastFast [2933:117451] *由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [__ NSCFNumber长度]:无法识别的选择器已发送例如0xb000000000000003'   * 首先抛出调用堆栈:

我从1天开始就搞乱了这段代码,但却无法找到实际问题。 但是当我在这个函数上设置静态限制时,每件事都可以正常工作。

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
NSLog(@"Number Of Row  %lu",_AddressArray.count);
return 4; // when set static limit here like this all works fine 
return [self.temporaryAddArray count];}
链接下面的

属于我的界面文件和实现文件

file.h https://drive.google.com/file/d/0B85GTvLEHASFVDEwajA1YXp1aUE/view?usp=sharing

file.m https://drive.google.com/file/d/0B85GTvLEHASFNEhzUnN1U25qaEk/view?usp=sharing

任何形式的帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

您需要确保初始化NSMutableArray

简单地添加

self.temporaryAddArray = [[NSMutableArray alloc]init];

-(void)viewDidLoad;

应该解决您的问题。

答案 1 :(得分:1)

经过非常深入的挖掘,在你的答案的帮助下,我简短地说出了问题所在。

  

Json回应在这里     {“Android”:[{“recip_code”:“94541824”,“recip_fname”:“”,“recip_lname”:“”,“recip_add1”:“hillsrtreat main road h.no. 3535”,“recip_img”:“” ,“recip_add2”:“”,“recip_stateid”:“新状态”,“recip_cityid”:“都柏林”,“结果”:“成功”},{“recip_code”:“53843299”,“recip_fname”:“”, “recip_lname”:“”,“recip_add1”:“rz x yes RR HDTV j deed ju”,“recip_img”:“”,“recip_add2”:“”,“recip_stateid”:“Westmeath”,“recip_cityid”:“都柏林“ ”结果“: ”成功“},{ ”recip_code“: ”11493834“, ”recip_fname“: ”“, ”recip_lname“: ”“, ”recip_add1“: ”newdgbfh“, ”recip_img“: ”“,” recip_add2 “:””, “recip_stateid”: “西米斯”, “recip_cityid”: “bobo2”, “结果”: “成功”},{ “recip_code”: “29376578”, “recip_fname”: “”, “recip_lname” : “”, “recip_add1”: “edggvfhkyfv”, “recip_img”: “”, “recip_add2”: “”, “recip_stateid”: “都柏林”, “recip_cityid”: “bobo2”, “结果”: “成功”} ,{“recip_code”:“22549638”,“recip_fname”:“”,“recip_lname”:“”,“recip_add1”:“此ios地址34 street”,“recip_img”:“”,“recip_add2”:“”, “recip_stateid”:0 “recip_cityid”:0 “结果是”: “成功”}]}

Image Link of json analysis

  

在给定的图像中,数组中存在错误的可视化,在第一个选择中它显示 STRING ,在第二个选择中有整数值,这是该残酷异常的原因

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"addAddress";
AddressTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier     forIndexPath:indexPath];
@try {


    NSDictionary *currentAddress = [self.AddressArray  objectAtIndex:indexPath.row];
    NSString *addTitle= [NSString stringWithFormat:@"%@%@",[currentAddress objectForKey:@"recip_add1"],[currentAddress objectForKey:@"recip_add2"]];

    cell.lblAddress.text =addTitle;
    cell.lblCity.text=[currentAddress objectForKey:@"recip_cityid"];
    cell.lblRecipentCode.text=[currentAddress objectForKey:@"recip_code"];
// cell.lblState.text=[NSString stringWithFormat:@"%@",[[currentAddress objectForKey:@"recip_stateid"] stringValue]];
    cell.lblState.text=[currentAddress objectForKey:@"recip_stateid"];

}
@catch (NSException *exception) {
    NSLog(@" Exception hit %@",exception);
}



return cell;
}

每个东西都可以正常工作(NSDictionary * currentAddress)返回字符串值,但是在cell.lblCity.text与Integr值交互的位置它会显示异常。

  

感谢大家给你重要时间并回答:)

答案 2 :(得分:0)

我担心你的价值观并不像你期望的那样。 看起来像“temporaryAddArray”是NSNumber不是数组而其他东西不是NSNumber但它是NSString。 在使用objectForKey:从JSON分配值之前,请通过显示以下内容检查其类型:

NSLog(@"%@", [variable class]);

并确保他们在JSON中预期类型,因为其中一些不是。 如果您粘贴从API获得的JSON,那么我会完全指出问题。

答案 3 :(得分:0)

  

self.temporaryAddArray = [tempAddress objectForKey:@"Android"];

这是问题......

  • 首先检查[tempAddress objectForKey:@“Android”]包含数组值 从你的错误我认为[tempAddress objectForKey:@“Android”]返回一个字符串值,这就是为什么这个抛出错误..

确保[tempAddress objectForKey:@“Android”]在加载tableview后返回NaArray值。

这样做可以解决您的问题。

[AFRequestmanager POST:tempUrlAddress parameters:urlParams success:^(AFHTTPRequestOperation *operation, id responseObject) {

         NSLog(@"Responce Parameter %@",responseObject);

        NSDictionary *tempAddress= (NSDictionary *)responseObject;

        [self.activityIndicatorView stopAnimating];

id android = [tempAddress objectForKey:@"Android"];
if (if([android isKindOfClass:[NSArray class]]){
    //Is array
       self.temporaryAddArray =[android mutableCopy];
        [self.tableview reloadData];
}

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

         NSLog(@"Errorsss parameters %@",error);
    }];