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

Xcode Search Bar - Can't search through NSObjects containing NSStrings

所以我在我的带有自定义单元格的自定义表格视图中添加了一个搜索栏,但出现错误。

-[Game rangeOfString:options:]: unrecognized selector sent to instance 0x170244e60 2016-10-15 15:41:49.557956 CustomCellApp[25930:7889617]

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Game rangeOfString:options:]: unrecognized selector sent to instance 0x170244e60

我正在用一个包含 NSObjects 的数组填充我的 tableview,其中包含字符串 (gamesArray) 以及我从 JSON 数组 (jsonArray) 中获取的那些字符串,全部来自 php连接到具有所有字符串的 MYSQL 服务器的文件。

搜索栏的代码如下:

-(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 NSObjectgameName ,读取名为 gName

的 NSObject 中的所有字符串

例如,这段代码针对 gamesArray 中的特定 NSObject

[[gamesArray objectAtIndex:indexPath.row] valueForKey:@"gameName"];

我的第一个猜测是:游戏数组中的对象不是字符串,它们是游戏对象。

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

这应该可以解决您的崩溃问题。如果搜索行为不正确,请提出与您的新问题相关的新问题。作为最佳猜测,我建议您检查 table 委托方法,了解它们在 filtered 为真时的行为方式。