Ios -[[uuu\nsu]字符串:选项:]:发送到实例的选择器无法识别
我在Ios -[[uuu\nsu]字符串:选项:]:发送到实例的选择器无法识别,ios,objective-c,json,uitableview,uisearchbar,Ios,Objective C,Json,Uitableview,Uisearchbar,我在UITableView中有一个UISearchBar,当点击它并开始键入时,它将自动更新列表。我有一个名为\u cloudItems的NSMutableArray,它返回一个JSON(我使用它来检索JSON字符串) 项目中的大多数代码都很好,除了这段给我带来此错误的代码:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[\uu NSDictionaryI rangeOfString:options:::::]:未识别的选择器发送到实例0x17
UITableView
中有一个UISearchBar
,当点击它并开始键入时,它将自动更新列表。我有一个名为\u cloudItems
的NSMutableArray,它返回一个JSON(我使用它来检索JSON字符串)
项目中的大多数代码都很好,除了这段给我带来此错误的代码:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[\uu NSDictionaryI rangeOfString:options:::::]:未识别的选择器发送到实例0x17e343e0'
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
if (searchText.length == 0) {
// Set bollean flag
isFiltered = NO;
} else {
// Set boolean flag
isFiltered = YES;
// Alloc and init our fliteredData
filteredList = [[NSMutableArray alloc] init];
// Fast enumeration
for (NSString *name in _cloudItems) {
NSRange nameRange = [name rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (nameRange.location != NSNotFound) {
[filteredList addObject:name];
}
}
}
// Reload tableView
[table reloadData];
}
我知道这两行代码是问题的原因:
for (NSString *name in _cloudItems) {
if (nameRange.location != NSNotFound) {
注意:\u cloudItems
是一个NSMutableArray
并从以下代码块获取其代码:
- (void)itemsRecieved:(NSArray *)items forRequest:(NSString *)connectionId {
NSLog(@"cloud engine recieved items on request %@", connectionId);
_cloudItems = items;
[table reloadData];
}
我已尝试将(NSString*name in _cloudItems){的更改为NSArray
和NSMutableArray
,但它们不起作用。我还添加了以下内容:
NSDictionary *dictItem = [_cloudItems objectAtIndex:indexPath.row];
for (NSString *name in dictItem) {
但出现以下错误消息:
使用未声明的标识符'indepath';您的意思是'nsindepath'?
我做错了什么?非常感谢您的帮助。谢谢。也许您在_clouditems中的一个名字不是[NSString],是[NSDictionary],并且[NSDictionary]没有响应rangeOfString:options:.在句子上设置断点,这样您就可以检查name变量。也许您在_clouditems中的一个名字不是[NSString],是[NSDictionary]和[NSDictionary]不响应rangeOfString:options:。在句子上设置断点,以便您可以检查名称变量。可能您在_clouditems中的一个名称不是[NSString],而是[NSDictionary]和[NSDictionary]不响应RangeOfsString:options:。在句子上设置断点,以便可以检查name变量。也许您在_clouditems中的一个名字不是[NSString],是[NSDictionary],并且[NSDictionary]不响应RangeOfsString:options:。在句子上设置断点,以便您可以检查name变量。尝试此操作
for (id name in _cloudItems) {
if([name isKindOfClass:[NSString class]]){
NSRange nameRange = [(NSString *)name rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (nameRange.location != NSNotFound) {
[filteredList addObject:name];
}
}
}
您应该确认名称为NSString
,然后使用rangOfString
。数组中的某些对象是NSDictionary
。如果所有对象都是NSDictionary
,您可能需要以下内容:
for (NSDictionary *item in _cloudItems) {
NSString *name = [item objectForKey:@"somekey"];
NSRange nameRange = [name rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (nameRange.location != NSNotFound) {
[filteredList addObject:name];
}
}
试试这个
for (id name in _cloudItems) {
if([name isKindOfClass:[NSString class]]){
NSRange nameRange = [(NSString *)name rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (nameRange.location != NSNotFound) {
[filteredList addObject:name];
}
}
}
您应该确认名称为NSString
,然后使用rangOfString
。数组中的某些对象是NSDictionary
。如果所有对象都是NSDictionary
,您可能需要以下内容:
for (NSDictionary *item in _cloudItems) {
NSString *name = [item objectForKey:@"somekey"];
NSRange nameRange = [name rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (nameRange.location != NSNotFound) {
[filteredList addObject:name];
}
}
试试这个
for (id name in _cloudItems) {
if([name isKindOfClass:[NSString class]]){
NSRange nameRange = [(NSString *)name rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (nameRange.location != NSNotFound) {
[filteredList addObject:name];
}
}
}
您应该确认名称为NSString
,然后使用rangOfString
。数组中的某些对象是NSDictionary
。如果所有对象都是NSDictionary
,您可能需要以下内容:
for (NSDictionary *item in _cloudItems) {
NSString *name = [item objectForKey:@"somekey"];
NSRange nameRange = [name rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (nameRange.location != NSNotFound) {
[filteredList addObject:name];
}
}
试试这个
for (id name in _cloudItems) {
if([name isKindOfClass:[NSString class]]){
NSRange nameRange = [(NSString *)name rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (nameRange.location != NSNotFound) {
[filteredList addObject:name];
}
}
}
您应该确认名称为NSString
,然后使用rangOfString
。数组中的某些对象是NSDictionary
。如果所有对象都是NSDictionary
,您可能需要以下内容:
for (NSDictionary *item in _cloudItems) {
NSString *name = [item objectForKey:@"somekey"];
NSRange nameRange = [name rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (nameRange.location != NSNotFound) {
[filteredList addObject:name];
}
}
nameRange
从何而来?\u cloudItems中的对象是NSString还是NSDictionary?@正如我在问题中所述,\u cloudItems
是一个NSMutableArray
数组。它从-(void)itemsRecieved:(NSArray*)items for request:(NSString*)connectionId{
NSDictionary*dictionary=[\u cloudItems objectAtIndex:indexath.row];而for(在[u cloudItems中的NSString*name)则是完全不同的dictionary*dictItem=[\u cloudItems objectAtIndex:indexath.row];表示_cloudItems中的对象是NSDictionary,而后者表示NSString…其中nameRange
来自何处?表示_cloudItems中的对象是NSString还是NSDictionary?@正如我在问题中所述,\u cloudItems
是一个NSMutableArray
。它正在从-(void)Items接收其信息(NSArray*)请求项:(NSString*)连接ID{
NSDictionary*DictionItem=[\u cloudItems objectAtIndex:Indexath.row];和for(NSString*name in _cloudItems)的dictionary*DictionItem=[\u cloudItems objectAtIndex:Indexath.row]非常不同;表示_cloudItems中的对象是NSDictionary,而后者表示NSString…其中nameRange
来自何处?表示_cloudItems中的对象是NSString还是NSDictionary?@正如我在问题中所述,\u cloudItems
是一个NSMutableArray
。它正在从-(void)Items接收其信息(NSArray*)请求项:(NSString*)连接ID{
NSDictionary*DictionItem=[\u cloudItems objectAtIndex:Indexath.row];和for(NSString*name in _cloudItems)的dictionary*DictionItem=[\u cloudItems objectAtIndex:Indexath.row]非常不同;表示_cloudItems中的对象是NSDictionary,而后者表示NSString…其中nameRange
来自何处?表示_cloudItems中的对象是NSString还是NSDictionary?@正如我在问题中所述,\u cloudItems
是一个NSMutableArray
。它正在从-(void)Items接收其信息(NSArray*)请求项:(NSString*)连接ID{
NSDictionary*DictionItem=[\u cloudItems objectAtIndex:Indexath.row];和for(NSString*name in _cloudItems)的dictionary*DictionItem=[\u cloudItems objectAtIndex:Indexath.row]非常不同;表示_cloudItems中的对象是NSDictionary,而后者表示NSString…不可能,这是问题所在。不可能,这是问题所在。不可能,这是问题所在。不可能,这是问题所在。@Junior117表示_cloudItems中的所有对象都是NSDictionary有没有办法在使用eac时将其转换为NSArray
h项在适当的tableview单元格中?@Junior117您应该知道您的NSArray结构,然后使用它。检查我的更新答案。您应该了解NSArrayOk中的NSDictionary。它现在可以工作了。谢谢您,我非常感谢