0

我会保持这个简短而甜蜜,因为我确信这是我所缺少的一些简单的东西。我正在尝试获取 NSMutableArray 的计数,该数组可以包含可变数量的对象(id 编号)。数组是从 JSon 数据创建的,并且数组本身是完美创建的,无论是单个对象还是一千个对象。

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

这是我正在使用的代码:

[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。

4

3 回答 3

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"]];
于 2012-10-13T19:35:29.820 回答
0
idNumArr = [currentList valueForKey:@"idNumber"];

在这一行中,currentList 返回一个 NSString,并且“count”不是 NSString 中的方法(您可以在此处查看:NSString class reference

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

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

请注意,上面的代码还没有经过测试,甚至没有经过语法检查。但是搜索该方法“isKindOfClass”以检查您在 idNumArr 中使用的对象类型。

于 2012-10-13T19:35:34.000 回答
0

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

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

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

于 2012-10-13T19:35:42.717 回答