"[__NSArrayM objectForKey:]: unrecognized selector" when trying to retrieve a string from Dictionary

2.8k views Asked by At

I am trying to set text to my labels. Here is the code:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    newsDataCell *cell = (newsDataCell*)[tableView dequeueReusableCellWithIdentifier:@"newsData"];
    
    if (cell == nil)
    {
        cell = [[newsDataCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"newsData"];
    }
    
   NSDictionary* currentrow =[self.Items objectAtIndex:indexPath.item];
     NSLog(@"currentrow:%@",currentrow);
    //UIImageView *image = (UIImageView*)[cell viewWithTag:0];
    
    UILabel *txtData = (UILabel*)[cell viewWithTag:1];
    NSString *testo = [currentrow objectForKey:@"Date"];
    [txtData setText:testo];
    
    
    UILabel *txtTitolo = (UILabel*)[cell viewWithTag:2];
    txtTitolo.text =[currentrow valueForKey:@"Title"];

    UILabel *txtDescrizione = (UILabel*)[cell viewWithTag:3];
    txtDescrizione.text = [currentrow valueForKey:@"Descr"];

    return cell;
}

I checked and currentrow actually contains the object. This is the error I get from Xcode:

2013-09-11 16:04:36.468 ApplicationName[2409:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0x7172f80' *** First throw call stack: (0x1333012 0x1158e7e 0x13be4bd 0x1322bbc 0x132294e 0xc5f4 0x1578fb 0x1579cf 0x1401bb 0x150b4b 0xed2dd 0x116c6b0 0x265bfc0 0x265033c 0x2650150 0x25ce0bc 0x25cf227 0x25cf8e2 0x12fbafe 0x12fba3d 0x12d97c2 0x12d8f44 0x12d8e1b 0x22757e3 0x2275668 0x9cffc 0x2c2d 0x2b55) libc++abi.dylib: terminate called throwing an exception

I get the same error using valueForKey:

txtTitolo.text =[currentrow valueForKey:@"Title"];

Here it is:

2013-09-11 16:09:34.478 ApplicationName[2409:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM valueForKey:]: unrecognized selector sent to instance 0x7172f80' *** First throw call stack: (0x1333012 0x1158e7e 0x13be4bd 0x1322bbc 0x132294e 0xc5f4 0x1578fb 0x1579cf 0x1401bb 0x150b4b 0xed2dd 0x116c6b0 0x265bfc0 0x265033c 0x2650150 0x25ce0bc 0x25cf227 0x25cf8e2 0x12fbafe 0x12fba3d 0x12d97c2 0x12d8f44 0x12d8e1b 0x22757e3 0x2275668 0x9cffc 0x2c2d 0x2b55) libc++abi.dylib: terminate called throwing an exception

What is wrong?

4

There are 4 answers

0
nicky_1525 On BEST ANSWER

I did it! I just used "stringWithFormat" and it worked like this:

NSString *testo = [NSString stringWithFormat:@"%@",[currentrow objectForKey:@"Date"]];

Thank you anyway for your answers!

2
Amin Negm-Awad On

A. This error is not produced by Xcode but by the runtime environment.

B. It means that currentrow is not a dictionary but an array.

C. How did you check it? Where do you create the items and put it in the list?

7
Amar On

Looks like currentrow is not a NSDictionary (which you are assuming). It is an NSArray.

NSDictionary* currentrow =[self.Items objectAtIndex:indexPath.item];
// Not a dictionary, it is an array.

That is why you are getting this crash. If this is a parsed JSON response, check the structure of JSON.

Hope that helps!

0
Narasimha Nallamsetty On

For me this is worked.

customerBillerFieldsArray = [self.detailItem valueForKey:@"customerBillerFileds"];

Earlier I used customerBillerFieldsArray = [self.detailItem objectForKey:@"customerBillerFileds"];