iOS应用程序崩溃 - [NSCFString count]:当计数仅为1时尝试获取NSMutableArray的计数

时间:2012-10-13 19:28:28

标签: ios arrays count nsmutablearray nsarray

我会保持这简短而甜蜜,因为我确信这很简单,我很遗憾。我正在尝试获取一个NSMutableArray的计数,它可以包含可变数量的对象(id号)。该数组是从JSon数据和数据创建的。无论是否存在单个对象,数组本身都是完美创建的。

关于获取计数,如果数组包含多个对象,则一切正常&花花公子count成功返回。但是,如果数组只有一个对象/ id号...应用程序崩溃 - [NSCFString count]:error。

以下是我正在使用的代码:

[request setCompletionBlock:^(void)
 {
     NSString *responseCurrent = [request responseString];
     NSMutableArray *json = [responseCurrent JSONValue];
     NSMutableArray *currentList = [[json valueForKeyPath:@"groupTO"] valueForKeyPath:@"currentList"];

     NSMutableArray *idNumArr = [[NSMutableArray alloc]init];
     idNumArr = [currentList valueForKey:@"idNumber"];
     debug(@"THIS IS ID ARRAY:  %@",idNumArr);

     debug(@"THIS IS COUNT OF THE ID ARRAY:  %@",[idNumArr count]);

     //  Ive also tried this to get the count, with no variation in results

     //  int countOfidNums = [idNumArr count];
     //  debug(@"count of arr:  %d",countOfidNums); 

我需要这个计数来实现条件来处理当这个数组只包含一个对象时出现的其他问题。

我假设这个问题源于这样一个事实:数组中的对象是字符串,当有一个对象时,它只是作为一个没有分隔逗号的字符串?也许???帮助!

另外:不确定它是否有所作为,但我使用ARC。

3 个答案:

答案 0 :(得分:2)

这里的问题是,当你到达那一行时,idNumArr不是一个数组,它是一个字符串。如果您不相信我,请在此之前打印[idNumArr class],或者使用调试器。

 NSMutableArray *idNumArr = [[NSMutableArray alloc]init];
 idNumArr = [currentList valueForKey:@"idNumber"];

[currentList valueForKey:@"idNumber"]显然是返回一个字符串(并且没有理由在该赋值之前立即分配数组。你可能想要:

 NSMutableArray *idNumArr = [[NSMutableArray alloc]init];
 [idNumArr addObject:[currentList valueForKey:@"idNumber"]];

答案 1 :(得分:0)

idNumArr = [currentList valueForKey:@"idNumber"];

在这一行中,currentList返回一个NSString,而“count”不是NSString中的一个方法(你可以在这里查看:NSString class reference

请记住,您在这里使用指针,“value for key”返回一个id指针(没有关联的类型)。所以你必须检查“valueForKey”返回的对象实际上是否是NSArray。

if([idNumArr isKindOfClass:[NSMutableArray class]])
//Then you can use "count"

请注意:考虑到上面的代码尚未经过测试甚至是语法检查。但是搜索该方法“isKindOfClass”以检查您在idNumArr中使用的对象类型。

答案 2 :(得分:0)

问题似乎是idNumArr实际上是一个字符串而不是一个数组。添加这样的日志,看看它给你的是什么:

idNumArr = [currentList valueForKey:@"idNumber"];
NSLog(@"%@", idNumArr class]);

数组中只有一个字符串的事实不应该导致这个问题。