2015-11-27 69 views
1

所以我有以下代碼:應用程序崩潰的搜索(過濾)的NSDictionary的

我.h文件中

@interface TableViewController : UITableViewController <UISearchBarDelegate,UITableViewDataSource,UITableViewDelegate> 
{ 
    IBOutlet UITableView *myTableView; 
    IBOutlet UISearchBar *mysearchBar; 
     NSMutableArray *filteredList; 
    BOOL isFiltered; 
} 
@property NSDictionary *iconSet; 

@end 

與.m文件,其中出問題的部分。

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ 

if(searchText.length == 0) 
{ 
    //bool in .h file 
    isFiltered = NO; 
}else 
{ 
    isFiltered = YES; 
    filteredList = [[NSMutableArray alloc] init]; 

    //self.iconSet is an NSDictionary (coming from a segue) formed like -(NSDictionary *) symbols { return self.symbols = @{@"":@"Heart With Arrow",@"❤️":@"Heavy Black Heart"} 
    for (NSDictionary *theDictionary in self.iconSet) { 

     for (NSString *key in theDictionary) { 
      NSString *value = [theDictionary objectForKey:key]; 
      NSRange stringRange = [value rangeOfString:searchText options:NSCaseInsensitiveSearch]; 

      if (stringRange.location != NSNotFound) { 
       [filteredList addObject:theDictionary]; 
       break; 
      } 
     } 
    } 
} 
[myTableView reloadData]; 
} 

Xcode不是在我的任何錯誤或警告叫聲,但是當我按在我的搜索欄,應用程序崩潰字母或圖標,它提供了以下消息:

** *終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,原因是:「 - [__ NSCFConstantString countByEnumeratingWithState:對象:伯爵:]:無法識別的選擇發送到實例0x1000f94d0」

我試圖尋找它的計算器,但避風港沒有發現我正在尋找的答案。我希望這裏有人能幫我找到我的(可能是愚蠢的)錯誤。

+0

是的,我是這麼認爲的,字典是建立與@ {@ 「」:@ 「心箭」},其中兩個項目是NSStrings – SoundShock

+0

我不認爲你需要通過self.iconSet中的每個字典循環,因爲它是一本字典本身不是一個字典數組。 – JDx

回答

1

由於self.iconSet是一本字典,因此使用for..in進行迭代將會爲字符串提供鍵。因此,不需要第二個循環:

for (NSString *key in self.iconSet) { 
    NSString *value = [self.iconSet objectForKey:key]; 
    ... 
} 

或更好:

[self.iconSet enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *value, BOOL *stop) { 
    ... 
}] 
+0

謝謝你,我用了更好的部分,過濾器現在可以工作(儘管我需要稍微調整一下,使它搜索鍵和值,目前鍵沒有給出任何結果)。 – SoundShock

+1

再次感謝,我現在通過編輯其他一些代碼來過濾字典,並使用enumerateKeysAndObjects – SoundShock

相關問題