【问题标题】:Xcode Search Bar - Can't search through NSObjects containing NSStringsXcode 搜索栏 - 无法搜索包含 NSStrings 的 NSObjects
【发布时间】:2016-10-15 20:02:05
【问题描述】:

所以我在我的自定义表格视图中添加了一个搜索栏,其中包含自定义单元格,但它给出了一个错误。

-[Game rangeOfString:options:]: 无法识别的选择器发送到实例 0x170244e60 2016-10-15 15:41:49.557956 CustomCellApp[25930:7889617]

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[Game rangeOfString:options:]: unrecognized selector sent to instance 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"];

【问题讨论】:

    标签: xcode uitableview nsobject searchbar nsrange


    【解决方案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];
        }
    }
    

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

    【讨论】:

    • 好的,它的漂亮部分工作了,我不再收到错误了,但是无论我搜索什么,只显示 tableview 中的第一个游戏。有任何想法吗?顺便说一句,谢谢
    • 如果此代码解决了问题中的问题,您介意接受吗?您评论中的问题是一个不同的问题,可能与上述问题中未显示的代码有关。我建议在搜索执行的不同点调试和检查filteredGamesArray 的内容。
    猜你喜欢
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    相关资源
    最近更新 更多