【发布时间】:2013-11-28 01:57:29
【问题描述】:
我在UITableView 中有一个UISearchBar,当您点击它并开始输入时,它会自动更新列表。我有一个名为 _cloudItems 的 NSMutableArray,它返回一个 JSON(我使用 JJCloudEngine 来检索 JSON 字符串)。
项目中的大部分代码都很好,预计这段代码会给我这个错误:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDictionaryI rangeOfString:options:]: unrecognized selector sent to instance 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) {
注意:_cloudItems 是一个 NSMutableArray,并从此代码块中获取它的代码:
- (void)itemsRecieved:(NSArray *)items forRequest:(NSString *)connectionId {
NSLog(@"cloud engine recieved items on request %@", connectionId);
_cloudItems = items;
[table reloadData];
}
我尝试将for (NSString *name in _cloudItems) { 更改为NSArray 和NSMutableArray,但它们不起作用。我还添加了这个:
NSDictionary *dictItem = [_cloudItems objectAtIndex:indexPath.row];
for (NSString *name in dictItem) {
但是会出现这个错误信息:
Use of undeclared identifier 'indexPath'; did you mean 'NSIndexPath'?
我做错了什么?任何帮助表示赞赏。谢谢。
【问题讨论】:
-
nameRange来自哪里? -
_cloudItems中的对象是NSString还是NSDictionary?
-
@Chancy 就像我在问题中所述,
_cloudItems是NSMutableArray。它正在从- (void)itemsRecieved:(NSArray *)items forRequest:(NSString *)connectionId {接收信息 -
NSDictionary *dictItem = [_cloudItems objectAtIndex:indexPath.row];而 for (NSString *name in _cloudItems) 则完全不同
-
NSDictionary *dictItem = [_cloudItems objectAtIndex:indexPath.row];表示 _cloudItems 中的对象是 NSDictionary,而后者的意思是 NSString...
标签: ios objective-c json uitableview uisearchbar