2016-06-02 12 views
0

Ich habe eine MutableArray mit 6 Subarrays und viele Sub-Arrays innerhalb jedes Subarray Click here for screenshot Jedes Array Einzelheiten der Station enthält ...... (es gibt 146 Arrays
insgesamt)Filtering Mutable Array NSPredicate

Mein Ziel ist es, das Array mit "Name" zu filtern, gleichzeitig möchte ich aber auch die restlichen Details extrahieren. Ich versuche die Prädikatmethode zu verwenden, aber sie schlägt fehl.

Meine searchResults-Array sollte die gefilterten Arrays mit Details der Station auf Basen von "Name" haben. Kann mir jemand dabei helfen? Danke im Voraus.

-(void)filterContentForSearchText:(NSString *)searchText{ 


NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"ANY Name CONTAINS[cd] %@",searchText]; 
_searchResults = [ _stationsArray filteredArrayUsingPredicate:resultPredicate]; 

} 


- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(nullable NSString *)searchString{ 

[self filterContentForSearchText:searchString]; 
return YES; 
} 
+1

"es versagt" Was bedeutet das? Bitte sagen Sie, was Sie erwarten und was tatsächlich passiert. – matt

+0

Ich möchte, dass mein Searchresults-Array gefilterte Sub-Arrays enthält. –

+0

Aber das könnte nichts mit dem Prädikat zu tun haben. Sind '_searchResults' so, wie Sie es erwarten, oder nicht? – matt

Antwort

0

Können Sie es versuchen !!!

#import <Foundation/Foundation.h> 

    @interface StationDetail : NSObject 

     @property (nonatomic, strong) NSString *name; 

    @end 

    - (void)viewDidLoad { 
     [super viewDidLoad]; 
     // Do any additional setup after loading the view, typically from a nib. 

     // Initialize 
     stationsArray = [[NSMutableArray alloc] init]; 

     NSArray *stationName = [[NSArray alloc] initWithObjects: @"Chennai", @"Bangalore", @"Kochi", @"Mumbai", @"Delhi", @"Hyderbad", @"Pune", @"Agra", @"Jaipur", nil]; 

     int index = 0; 
     for (int i = 0; i < 3; i++) { 
      NSMutableArray *substationsArray = [[NSMutableArray alloc] init]; 
      for (int j = 0; j < 3; j++) { 
       StationDetail *station = [[StationDetail alloc] init]; 
       [station setName:[stationName objectAtIndex:index]]; 
       [substationsArray addObject:station]; 
       index++; 

      } 
      [stationsArray addObject:substationsArray]; 
     } 


    } 


    -(void)filterContentForSearchText:(NSString *)searchText{ 
     // only one parameter of the object need to be filtered 
     NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@",searchText]; // name is object key name 
     NSArray *searchResults = [ stationsArray filteredArrayUsingPredicate:resultPredicate]; 
     NSLog(@"%lu",(unsigned long)[searchResults count]); 

    } 

    -(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{ 
     [self filterContentForSearchText:searchBar.text]; 
    } 
+0

Nein, ich kann dies nicht tun, muss ich Filter auf die Stations-Array selbst anwenden, nach Ihrem Code erstellen Sie ein neues Array ausschließlich für Namen und dann Filter anwenden. Hier mein Fall ist mein Array hat 146 Objekte, jedes Objekt hat viele Schlüssel, einschließlich Namen. Ich muss Filter auf Name anwenden, wenn ich getrennte Reihe für Namen anlege, kann ich nicht segue benutzen. –

+0

Erstellen Sie einfach ein Array mehr als Stationen Array. Sie könnten das neue Array für den Übergang verwenden. Behalten Sie alle Werte im vorhandenen Array bei und verwenden Sie das vorhandene Array nur zum Filtern von Werten. –

+0

yeh muss versuchen das war. Vielen Dank für Ihre Zeit :) . Können Sie Ihre E-Mail-ID teilen? habe ein paar Zweifel mit iOS. Danke. –

0

Die Lösung erhalten.