NSInvalidArgumentException',原因:'-[__NSArrayI length]:发送到实例 0x165d5150 的无法识别的选择器'

NSInvalidArgumentException', reason: '-[__NSArrayI length]: unrecognized selector sent to instance 0x165d5150'

您好,我正在从服务器获取此数据

NSDictionary*feed=[saveDic objectForKey:@"feed"];
NSLog(@"%@",feed); //Outputs: feed = ( { code = yQ7j0t; "user_id" = 889445341091863; } ); }
NSLog(@"%@",[feed valueForKey:@"code"]);
NSString *referralCode = [feed valueForKey:@"code"];
NSLog(@"%@",referralCode);
self.referralCode.text=referralCode;

因此我遇到了以下错误。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI length]: selector sent to instance 0x165d5150'``

如有任何帮助,我们将不胜感激。

有些地方使用变量;

yourVaribleName.length

[yourVaribleName length]

应该是

yourVaribleName.count

注意:崩溃准确地说“yourVaribleName”是 NSArray 键入你想要的 lengthNSArray。但是 NSArray 没有特征“length”。 NSArray 具有“Count”特征

//试试下面的代码

NSArray *referralCode = [feed valueForKey:@"code"];
NSLog(@"%@",referralCode);
self.referralCode.text=[referralCode componentsJoinedByString:@" "];//@"," or @"" what event you need

问题是,您的 feed 键包含一个数组。您没有在代码中正确处理它,这就是发生崩溃的原因。当您调用 valueForKey: 时,它会检索由该特定键保存的值数组。

修复你可以使用:

NSArray *feed          = [saveDic objectForKey:@"feed"];
NSArray *referralCodes = [feed valueForKey:@"code"];
NSString *referralCode = referralCodes.count ? referralCodes[0] : @"";
NSLog(@"%@",referralCode);

但我个人更喜欢使用 objectForKey: 而不是 valueForKey:。所以你可以像这样重写代码:

NSArray *feed          = [saveDic objectForKey:@"feed"];
NSString *referralCode = feed.count ? [feed[0] objectForKey:@"code"] : @"";
NSLog(@"%@",referralCode);

您的 Feed 数据在数组中。所以你已经从 array.Hope 中检索代码值,它将帮助你。

 NSMutableArray*feed=[saveDic objectForKey:@"feed"];
    NSLog(@"%@",feed);
    NSLog(@"%@",[feed valueForKey:@"code"]);
    NSString *referralCode =  [[feed objectAtIndex:indexPath]valueForKey:@"code"];
    NSLog(@"%@",referralCode);
    self.referralCode.text=referralCode;