Bei der Suche bekomme ich als Ergebnis immer den ersten Eintrag als Treffer zurück

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Bei der Suche bekomme ich als Ergebnis immer den ersten Eintrag als Treffer zurück

    AARRRRGGGGHHHH.

    Ich stehe wahrscheinlich gerade nur auf dem Schlauch. Habe eine Suche in einem TableViewController eingebaut. Doch als Ergebnismenge bekomme ich in der Anzeige bei einem Treffer immer den ersten Datensatz angezeigt und nicht das wirkliche Ergebnis. Wobei im Log relativ klar das richtige Ergebnis drin steht.
    Allerdings ist mir beim Debuggen aufgefallen, dass meine Methode (s. unten) niemals in "self.tableView == self.searchDisplayController.searchResultsTableView" reinspringt. Bei sonstiger Fallunterscheidung z.B. in der Methode tableView:numberOfRowsInSection: klappt das!

    Quellcode

    1. -(void)configureCell:(HistoryMyPlaceTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
    2. {
    3. MyPlaces *myPlace = nil;
    4. NSLog(@"Aktuelles Suchergebnis lautet: %@", self.searchResults);
    5. if (self.tableView == self.searchDisplayController.searchResultsTableView) {
    6. NSLog(@"jetzt bin ich auch wirklich hier drin");
    7. myPlace = [self.searchResults objectAtIndex:indexPath.row];
    8. } else {
    9. myPlace = [self.places objectAtIndex:indexPath.row];
    10. }
    11. cell.textLabel.text = [myPlace name];
    12. cell.detailTextLabel.text = [NSString stringWithFormat:@"%@, %@", [myPlace laengengrad], [myPlace breitengrad]];
    13. }
    Alles anzeigen


    Logauswertung bei der Eingabe von "toller":

    Quellcode

    1. 2014-07-31 11:41:10.467 friendshipping[3823:60b] Aktuelles Suchergebnis lautet: (
    2. "<MyPlaces: 0x16d95a90> (entity: MyPlaces; id: 0x16d94b90 <x-coredata://D1B56171-0406-408A-8E14-1D3399194FB4/MyPlaces/p2> ; data: {\n breitengrad = 0;\n laengengrad = 0;\n name = Toller Ort;\n})"
    3. )



    und noch die Screenshots (falls es hilft).

    Für jeden Hinweis dankbar.
    Gruß
    iet
    Dateien
    ----
    Macht's gut und danke für den Fisch
  • Quellcode

    1. if (self.tableView == self.searchDisplayController.searchResultsTableView)

    kann ja nicht funktionieren, da self.tabelView immer der "normale" TableView sein wird und self.searchDisplayController.searchResultsTableView immer der TableView für das Suchergebnis sein wird.

    Ich verstehe nicht, warum Du die TableViewCells in der Methode configureCell:atIndexPath: mit dem Inhalt bestückst. Gibt es dafür einen bestimmten Grund?

    Warum verwendest Du nicht die Methode tableView:cellForRowAtIndexPath: aus dem UITableViewDataSource Protokol dafür?

    In tableView:cellForRowAtIndexPath: würde eine Unterscheidung, ob die Daten für den "normale" TableView oder den TableView für das Suchergebnis benötigt werden wunderbar funktionieren. Dies sieht dann z.B. so aus:

    Quellcode

    1. ...
    2. if (tableView == self.searchDisplayController.searchResultsTableView)
    3. {
    4. // Zellen/Daten für den TableView für das Suchergebnis
    5. }
    6. else
    7. {
    8. // Zellen/Daten für den "normale" TableView
    9. }
  • @Kay: danke. hatte ich schon gemacht

    @MCDan: Vielen Dank. So geht es / dachte, dass ich das zwischendurch auch ausprobiert hatte.

    configureCell:atIndexPath: hatte ich mir mal angewöhnt, weil das in den Apple-Beispielen oft so drin ist.

    Ehrlich gesagt hab ich noch nicht verstanden, warum die property "tableView" sich in der einen Methode von der anderen Methode unterscheidet.
    Wenn in der Methode tableView:cellForRowAtIndexPath: tableView = self.searchDisplayController.searchResultsTableView ist und ich von daraus configureCell:atIndexPath: aufrufe, warum ist dann nicht dort auch tableView = self.searchDisplayController.searchResultsTableView?

    In meinem TableViewController ist doch tableView eine property auf die ich sonst überall zugreifen kann. Oder liegt das an dem Aufruf meiner eigenen configureCell-Methode.

    ist wahrscheinlich eine Anfänger-Frage, aber ich will ja lernen.
    Danke!
    ----
    Macht's gut und danke für den Fisch
  • Wenn Du die Methode tableView:cellForRowAtIndexPath: so verwendest, wie in der Apple Doku, also

    Quellcode

    1. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    dann ist mit tableView natürlich die lokale Variable gemeint und nicht self.tableView.

    Der Name der lokalen Variable ist meiner Meinung nach etwas unglücklich von Apple gewählt, da tableView nicht gleich self.tableView ist.
  • Ein Missverständnis, das es ohne Punktnotation schlicht nicht gäbe.
    Denn [self tableView] ist schon auf dem ersten Blick nicht einmal ansatzweise dasselbe wie tableView.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P