Xcode搜索栏 - 无法搜索包含NSStrings的NSObject

时间:2016-10-15 20:02:05

标签: xcode uitableview nsobject searchbar nsrange

因此,我在自定义的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"];

1 个答案:

答案 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];
    }
}

这应该解决您的崩溃问题。如果搜索行为不正确,请询问与您的新问题相关的新问题。作为最佳猜测,我建议您检查表委托方法,了解过滤为真时的表现方式。