2016-10-15 37 views
0

因此,我將自定義單元格添加到自定義tableview的搜索欄,並給出錯誤。Xcode搜索欄 - 無法通過包含NSStrings的NSObjects進行搜索

- [遊戲rangeOfString:選項:]:無法識別的選擇發送到實例0x170244e60 2016年10月15日15:41:49.557956 CustomCellApp [25930:7889617]

***終止應用程序未捕獲的,由於異常「NSInvalidArgumentException」,原因:「 - [遊戲rangeOfString:選項:]:無法識別的選擇發送到實例0x170244e60

我被含有包含字符串(gamesArray)NSObjects和這些字符串我的陣列填充我的tableview從一個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的字符串,然後將它添加到一個名爲gamesArray的數組的NSObject中

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,閱讀完所有的琴絃在NSObject的被稱爲的gname

例如,這段代碼針對特定NSObject的的gamesArray

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

回答

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

這應該解決您的崩潰問題。如果搜索行爲不正確,請提出與您的新問題相關的新問題。作爲一個最好的猜測,我會建議你檢查你的表格委託方法,以確定它們在過濾爲真時的行爲。

+0

好吧它美麗的一部分工作,我不會再犯錯,但無論我只搜索桌面視圖的第一個遊戲顯示。有任何想法嗎?謝謝btw – BroSimple

+0

如果這段代碼解決了問題中的問題,你是否介意接受它?評論中的問題是一個不同的問題,可能與上面問題中未顯示的代碼有關。我建議在搜索執行的不同點上調試並檢查filteredGamesArray的內容。 – Lytic