0

UITearchViewにUISearchBarを追加しようとしています。UITableViewControllerのUISearchBarで問題が発生しました

これは、彼らが検索に使用する方法である:

- (void) searchTableView { 

NSString *searchText = searchBar.text; 
NSMutableArray *searchArray = [[NSMutableArray alloc] init]; 

for (NSDictionary *dictionary in listOfItems) 
{ 
NSArray *array = [dictionary objectForKey:@"Countries"]; 
[searchArray addObjectsFromArray:array]; 
} 

for (NSString *sTemp in searchArray) 
{ 
NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch]; 

if (titleResultsRange.length > 0) 
[copyListOfItems addObject:sTemp]; 
} 

[searchArray release]; 
searchArray = nil; 
} 

しかし、私は辞書を持っていない、私はちょうど私のアレイ内で検索したい「exerciseArray」は、このようinitにされている:

NSString *path = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"plist"]; 
NSMutableArray *rootLevel = [[NSMutableArray alloc]initWithContentsOfFile:path]; 
self.exerciseArray = rootLevel; 
[rootLevel release]; 

私はそれをのNSLogとき、私が取得:

exerciseArray: (
     { 
     exerciseName = "Balance Board"; 
    }, 
     { 
     exerciseName = "Barbell Seated Calf Raise"; 
    }, 
     { 
     exerciseName = "Calf Press On The Leg Press Machine"; 
    }, 
     { 
     exerciseName = "Calf Raises- With Bands"; 
    }, 

だから、誰も私の目に合うように検索方法を変更することができます私は持っているアレイですか?それには鍵があるようです。

私はこれを試してみましたが、それはうまくいきませんでしたとエラー*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary rangeOfString:options:]: unrecognized selector sent to instance 0x2d6450

- (void) searchTableView { 

    NSString *searchText = searchBar.text; 
    NSLog(@"exerciseArray: %@", exerciseArray); 
    for (NSString *sTemp in listOfItems) 
    { 
     if (sTemp) { 
      NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch]; 

      if (titleResultsRange.length > 0) 
       [copyListOfItems addObject:sTemp]; 
     } 
    } 
} 
+0

NSDatesは*すでに* UTC(別名「GMT」)です。 –

+0

もっとコードを投稿してください。 – Jon

+0

'UIViewController'派生クラスのインターフェイスを投稿できますか? – sergio

答えて

0

でラインNSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];

で墜落したあなたは、各辞書内の1つのキー/値のペアを持つ辞書の配列(exerciseNameを持っているように見えます)。ので、あなたのデータセットのために、それはこのようになります。あなたは、配列とまたあなたのテーブルビューのデータソースの方法に関連したVCのコードを投稿した場合

for (NSDictionary *dictionary in exerciseArray) 
{ 
    NSArray *array = [dictionary objectForKey:@"exerciseName"]; 
    [searchArray addObjectsFromArray:array]; 
} 
... 

、私はそれを修正することができているとあなたが何をする必要があるかを示しています。テーブルビューから検索するための

0

私はこれを試してみましたし、私はあなたが参照することができます..私はNSPredicatesは、配列で検索するには良い方法であると考えて

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    self.searching=NO; 
    NSString *originalString; 
    [self.filteredProductArray removeAllObjects]; 
    for (int i=0; i<self.exerciseArray.count; i++) 
    { 
     originalString=[[[self.exerciseArray objectAtIndex:i] objectForKey:@"exerciseName"] lowercaseString]; 
     if (!([originalString rangeOfString:[searchText lowercaseString]].location==NSNotFound)) 
     { 
      [self.filteredProductArray addObject:[self.exerciseArray objectAtIndex:i]]; 
     } 
    } 
    if ([searchText isEqual:@""]) 
    { 
     self.searching=NO; 
    } 
    [self.tableView reloadData]; 
} 
関連する問題