因此,我在自定义的Google桌面视图中添加了一个搜索栏,并提供了错误。
- [Game rangeOfString:options:]:无法识别的选择器发送到实例0x170244e60 2016-10-15 15:41:49.557956 CustomCellApp [25930:7889617]
***由于未捕获的异常终止应用' NSInvalidArgumentException',原因:' - [Game rangeOfString:options:]:无法识别的选择器发送到实例0x170244e60
我通过包含NSObjects的数组来填充我的tableview,这些数组包含字符串(gamesArray)以及我从JSON数组(jsonArray)获取的字符串,所有这些都来自连接到MYSQL服务器的php文件它有所有的字符串。
以下是搜索栏的代码:
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
if (searchText.length == 0) {
isFiltered = NO;
} else {
isFiltered = YES;
filteredGamesArray = [[NSMutableArray alloc] init];
// ----- Problem Method ----- //
for (NSString *str in gamesArray) {
// ----- Crashes Here ----- //
NSRange stringRange = [str rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (stringRange.location != NSNotFound) {
[filteredGamesArray addObject:str];
}
}
// ------------------------------------ //
}
[myTableView reloadData];
}
以下是tableView的代码:
// Configuring the cell
Game * gameObject;
// Showing either Normal List or Filtered List
if (!isFiltered) {
gameObject = [gamesArray objectAtIndex:indexPath.row];
}
else {
gameObject = [filteredGamesArray objectAtIndex:indexPath.row];
}
以下是服务器代码 它将服务器中的字符串添加到jsonarray,然后将其添加到NSObject中,并添加到名为gamesArray的数组
NSString * gID = [[jsonArray objectAtIndex:i] objectForKey:@"id"];
NSString * gName = [[jsonArray objectAtIndex:i] objectForKey:@"gameName"];
NSString * gLabel1 = [[jsonArray objectAtIndex:i] objectForKey:@"gameLabel1"];
NSString * gLabel2 = [[jsonArray objectAtIndex:i] objectForKey:@"gameLabel2"];
NSString * gLabel3 = [[jsonArray objectAtIndex:i] objectForKey:@"gameLabel3"];
非常感谢任何帮助! 我怎样才能解决这个问题?有任何想法吗?谢谢
我认为问题在于,在搜索时,程序看到它有一个要搜索的数组,gamesArray,但是当进入它时有5个NSObject,每个包含字符串,所以它不起作用,因为它不知道该怎么做。
作为一种解决方案,我如何才能使搜索栏搜索 gamesArray ,直接在1 NSObject , gameName ,读取那个名为 gName
的NSObject中的所有字符串例如,这段代码针对gamesArray中的特定NSObject
[[gamesArray objectAtIndex:indexPath.row] valueForKey:@"gameName"];
答案 0 :(得分:1)
我的第一个猜测是:游戏数组中的对象不是字符串,它们是游戏对象。
for (Game *game in gamesArray) {
NSString *str = game.fieldOfInterest;
// ----- Crashes Here ----- //
NSRange stringRange = [str rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (stringRange.location != NSNotFound) {
[filteredGamesArray addObject:game];
}
}
这应该解决您的崩溃问题。如果搜索行为不正确,请询问与您的新问题相关的新问题。作为最佳猜测,我建议您检查表委托方法,了解过滤为真时的表现方式。