Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS应用程序崩溃-[NSCFString count]:尝试获取NSMutableArray计数时,如果计数仅为1_Ios_Arrays_Count_Nsmutablearray_Nsarray - Fatal编程技术网

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

iOS应用程序崩溃-[NSCFString count]:尝试获取NSMutableArray计数时,如果计数仅为1,ios,arrays,count,nsmutablearray,nsarray,Ios,Arrays,Count,Nsmutablearray,Nsarray,我会尽量简短,因为我确信我遗漏了一些简单的东西。我正在尝试获取NSMutableArray的计数,该数组可以包含数量可变的对象(id号)。数组是从JSon数据创建的&数组本身是完美创建的,无论是单个对象还是1000个对象 关于获取计数,如果数组包含多个对象,则一切正常&dandy&count将成功返回。但是,如果数组只有一个对象/id号。。。应用程序崩溃,出现-[NSCFString count]:错误 以下是我正在使用的代码: [request setCompletionBlock:^(voi

我会尽量简短,因为我确信我遗漏了一些简单的东西。我正在尝试获取NSMutableArray的计数,该数组可以包含数量可变的对象(id号)。数组是从JSon数据创建的&数组本身是完美创建的,无论是单个对象还是1000个对象

关于获取计数,如果数组包含多个对象,则一切正常&dandy&count将成功返回。但是,如果数组只有一个对象/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。

这里的问题是,当你到达那一行时,
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"]];
在这一行中,currentList返回一个NSString,而“count”不是NSString中的一个方法(您可以在这里检查:

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

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

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

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

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

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

这修复了崩溃,并为我提供了正确的计数,如果只向数组中添加了一个对象,也可以正常工作……但是如果idNumArr中json数据存储了多个id号,它会在arr中创建多个对象,每个对象都包含在g所有的id号。例如:2个id应该存储在数组中…应该是(12349876),计数为2。但是现在数组是(12349876),(12349876),计数为2
idNumArr = [currentList valueForKey:@"idNumber"];
NSLog(@"%@", idNumArr class]);