2012-04-12 3 views
0

I eine Kerndaten-Datenbank haben, und jede Zeile ist in einer Tabelle gezeigt.filteredArrayUsingPredicate Array nicht beibehalten

Ich habe eine Suchsteuerung die Benutzer zu suchen, indem Vor- oder Nachnamen zu ermöglichen.

wenn ich Ergebnisse von ‚filteredArrayUsingPredicate‘ nachladen ich die Suchsteuerung Tisch und alles funktioniert gut. Die Tabelle zeigt die gefilterten Ergebnisse.

Wenn es um ein Ergebnis wählen kommt, die Ergebnis-Reihe leer ist und stürzt anschließend aufgrund [array atIndex: index path.row] außerhalb der Grenzen. Das Array ist leer und lässt mich glauben, dass es veröffentlicht wurde.

Dieser Code funktioniert perfekt in einer anderen Ansicht. Ich habe versucht zu schreiben und zu reinigen und zu bauen und immer noch passiert - irgendwelche Ideen?

Unten ist mein Code

@property (nonatomic behalten) NSArray * cachedSearchResults;

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


    NSPredicate * predicate = [NSPredicate predicateWithFormat:@"first_name contains[cd] %@ || last_name contains[cd] %@",searchText, searchText]; 
    self.cachedSearchResults = [[self.cachedResults filteredArrayUsingPredicate:predicate]retain]; 
; 
    [searchController.searchResultsTableView reloadData]; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

PupilManagedObject* selected = nil; 
if(tableView == table){ 
    selected = [cachedResults objectAtIndex:indexPath.row]; 
}else{ 
    selected = [self.cachedSearchResults objectAtIndex:indexPath.row]; //array is empty at this point 
} 
} 
+0

Logging das Array bei tableView: numberOfRowsInSection und cellForRowAtIndexPath zeigt eine korrekt gefüllte Array – Dan

Antwort

0

fand ich das Problem war die Suchsteuerung entlassen wurde, bevor ich die Verwendung der Daten im Array gemacht. ungerade, aber die Reihenfolge meines Codes geändert funktionierte

-1

Dieser Code Snippit fehlt wichtige Informationen. Von dem, was ich sehe, es klingt, als ob Sie nicht korrekt berechnen Tabellenansicht: numberOfRowsInSection :. Stellen Sie sicher, dass die richtige Anzahl von Zeilen für das angegebene Szenario bereitgestellt wird.

+0

danke - es ist. Protokollierung des Arrays bei tableView: numberOfRowsInSection - cellForRowAtIndexPath zeigt ein gefülltes Array. Es scheint zwischen dieser und der Auswahl freigegeben zu werden – Dan

+0

Ist das Array tatsächlich leer in der tableView: didSelectRowAtIndexPath :, oder wird es deallociert? Ich bin verwirrt, woher die Variable "Tabelle" kommt, und warum Sie zwischen ihnen wechseln müssen. Haben Sie den in diese Funktion eingehenden Indexpfad protokolliert, um sicherzustellen, dass Sie genau das erwarten, was Sie erwarten? –

+0

Danke für Ihre Antwort. Wenn das Array gedruckt wird, ist es nicht Null, es ist leer. Der Vergleich besteht darin, zu überprüfen, ob der Delegat von der Suchsteuerung oder -tabelle aufgerufen wurde. Der Indexpfad ist korrekt. Das Problem besteht darin, dass das Array aus irgendeinem Grund für den Speicherort geleert wird. Ich habe den gleichen Code mindestens 5 Mal in der gleichen App ohne Probleme verwendet. Es ist sehr merkwürdig .. – Dan