Ios NSInvalidArgumentException';,原因:'-[\uu NSArrayI length:发送到实例的选择器无法识别
当我从谷歌那里寻找答案时,这里的大多数答案都说,你试图在一个不受支持的NSArray上使用长度 这里的问题是我甚至没有在代码中使用任何NSArray或长度 我有一个Ios NSInvalidArgumentException';,原因:'-[\uu NSArrayI length:发送到实例的选择器无法识别,ios,objective-c,cocoa-touch,uitableview,unrecognized-selector,Ios,Objective C,Cocoa Touch,Uitableview,Unrecognized Selector,当我从谷歌那里寻找答案时,这里的大多数答案都说,你试图在一个不受支持的NSArray上使用长度 这里的问题是我甚至没有在代码中使用任何NSArray或长度 我有一个 NSMutableArray *filteredContent; 其中filteredContent将包含plist中的词典 在为tableView在单元格上写入cell.textlab.text之前,一切都运行良好 通过NSLog检查,内容确实是一个数组 以下是我尝试编写单元格文本的方式: cell.textLabel.t
NSMutableArray *filteredContent;
其中filteredContent
将包含plist中的词典
在为tableView
在单元格上写入cell.textlab.text之前,一切都运行良好
通过NSLog
检查,内容确实是一个数组
以下是我尝试编写单元格文本的方式:
cell.textLabel.text=[[self.filteredContent objectAtIndex:indexPath.row] valueForKey:@"recipeName"];
但它给了我错误,所以我将其更改为:
NSString *myValue = [self.filteredContent valueForKey:@"recipeName"];
cell.textLabel.text=myValue;
但是结果是一样的,我不知道我得到了这个错误
进一步详情:
[results addObject:@[recipe]];
这是我创建主数组的地方,然后使用seguefilteredContent=results将其传递到PageView
编辑:
recipe=arrayOfPlist[i];
where-arrayOfPlist
NSArray *arrayOfPlist = [[NSArray alloc] initWithContentsOfFile:path];
//Output to NSLog(@"FIltered Content : %@", self.filteredContent);
FIltered Content : (
(
{
category = main;
difficultyLevel = "3/5";
numberOfPerson = 5;
recipeDetail = "Bulguru koy su koy beklet pisir ye ";
recipeImage = "nohutlu-pilav.jpg";
recipeIngredients = "pirinc,tereyag tuz,bulgur";
recipeName = "Bulgurlu Pilav";
time = "25 dk";
}
),
(
{
category = main;
difficultyLevel = "3/5";
numberOfPerson = 5;
recipeDetail = "Bulguru koy su koy beklet pisir ye ";
recipeImage = "nohutlu-pilav.jpg";
recipeIngredients = "pirinc,tereyag tuz,bulgur";
recipeName = "Bulgurlu Pilav";
time = "25 dk";
}
)
)
2014-04-27 02:47:41.704 deneme2[19820:60b] VALUE IN FILTERED TABLE is (
"Bulgurlu Pilav" // this is what i want to write to the cell label and i get it with myValue-look a bit above
)
根据数据的输出,您在其中有一个额外的数组。因此,您需要:
cell.textLabel.text = self.filteredContent[indexPath.row][0][@"recipeName"];
filteredContentArray的每个元素都是另一个数组。每个内部数组都有包含所需数据的字典。按照@rmaddy的建议执行,或者:
更改:
[results addObject:@[recipe]];
致:
说明:
NSInvalidArgumentException',原因:'-[\uu NSArrayI长度:发送到实例的选择器无法识别
这个错误告诉我们:
对象是一个NSArray
(不知何故,在某处)
在此NSArray
对象上调用的方法是length
- 但是
NSArray
没有length
方法
- 似乎在某个地方发送了对
length
方法的调用,很可能是在一个NSString
对象上发送的,该对象实际上持有一个NSArray
对象,而不是一个NSString
对象
首先请注意,当您指定:
@[]
- 这意味着要创建的对象是
NSArray
对象
- 参考:
所以当您这样做时:[results addObject:@[recipe]];
:
@[recipe]
相当于
[NSArray alloc]initWithObjects:recipe,nil]
所以…您基本上是采用配方
,将其放入一个数组中,然后将此数组对象添加到结果
(这是另一个数组)中
稍后当您来到PageView
[[self.filteredContent objectAtIndex:indexPath.row] valueForKey:@"recipeName"];
将返回键recipeName
的值数组
因此,基本上,字符串包含的是数组,而不是字符串对象。
现在…无论您是否在其上调用了length
,在生命周期的某个地方,length
在cell.textlab.text
上被调用,并引发了这个错误。您在解析JSON吗?如果您认为您有字符串,您实际上有一个数组。@rmaddy不,我没有解析JSON。我使用的是同一个TableViewControllerh到目前为止,几个过滤器都工作正常。所以我不认为这是下一个问题。你是在告诉我我正在尝试将我的cellLabel.text设置为数组吗?是的,myValue
实际上是指向一个NSArray
,而不是一个NSString
。这可能是由于误用了valueForKey:
。如果你不明白的话如何在数组中获取所需字符串,请添加有关数据结构的详细信息。因此,您认为这是导致此异常的问题吗?@rmaddy添加了所有详细信息。您在哪里执行此操作-[results addObject:@[recipe]];
您正在添加一个包含单个元素的元素,这是您的配方数组FPList。您可能只是想要[results addObject:recipe]
?@Paulw11哦,我怎么会错过这个。是的,这就是诀窍。谢谢您
[[self.filteredContent objectAtIndex:indexPath.row] valueForKey:@"recipeName"];