Search code examples
iosobjective-cxcodensarray

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


Hi I am getting this data form server

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;

And beacuse of that I am getting below error.

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

Any help will be appreciated.


Solution

  • The issue is, your feed key holds an array. You are not properly handling that in your code, that is why the crash occurs. When you call valueForKey: it retrieves an array of values held by that specific key.

    For fixing that you can use:

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

    But I personally prefer using objectForKey: instead of valueForKey:. So you can re-write the code like:

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