NSPredicate schlägt neuerdings fehl !

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

  • NSPredicate schlägt neuerdings fehl !

    Hallo Zusammen,
    bis vor kurzem funktionierte das Filtern für ein Daten-Array (NSMutableArray) anstandslos (von 2018 bis vor kurzem).


    Quellcode

    1. -(void)applyMedialistFilterWithString:(NSString*)filter {
    2. if (filter.length > 0) {
    3. NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"titel contains[cd] %@ OR album contains[cd] %@ OR interpret contains[cd] %@ OR playlist contains[cd] %@ OR genre contains[cd] %@", filter,filter,filter,filter,filter];
    4. NSArray *test = [self.medienlistArray filteredArrayUsingPredicate:filterPredicate];
    5. self.medienlistArrayFilter = [NSMutableArray arrayWithArray:test];
    6. }
    7. else {
    8. self.medienlistArrayFilter = self.medienlistArray;
    9. }
    10. [self.medienTableView reloadData];
    11. }
    Alles anzeigen
    Jetzt bekomme ich folgende Laufzeit-Fehlermeldung:

    [General] Can't use in/contains operator with collection 990 (not a collection) [an der Stelle Zeile 5.]

    Leider habe ich nichts bei Google oder bei der Apple-Doku gefunden. Hat jemand vielleicht ein ähnliches Problem?

    VG
    Si tacuisses, philosophus mansisses !
  • Ich nutze NSPredicates im NSFetchResultController und auch auf NSArrays und habe gerade noch einmal in Xcode 14. (Simulator) getestet: Kein Problem.

    Mal in's Blaue gefragt: (1.) Hast Du wirklich nix geändert und (2.) kommst Du in medienlistArray mit Key-Value-Coding an die entsprechenden Attribute heran? Ich habe bei mir immer ein "SELF" verwendet, um die einzelnen Elemente zu referenzieren, z. B. so:


    Quellcode

    1. if (self.searchController.searchBar.text.length > 0)
    2. {
    3. NSPredicate *filter = [NSPredicate predicateWithFormat:@"SELF.lastPathComponent contains[cd] %@", self.searchController.searchBar.text];
    4. self.filteredArray = [self.tableArray filteredArrayUsingPredicate:filter];
    5. self.viewIsFiltered = TRUE;
    6. }
    HTH, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Ein Hinweis noch, es ist für macOS nicht iOS.

    Ausgabe Filter:

    Quellcode

    1. predicate: titel CONTAINS[cd] "test" OR album CONTAINS[cd] "test" OR interpret CONTAINS[cd] "test" OR playlist CONTAINS[cd] "test" OR genre CONTAINS[cd] "test"

    Alle Felder die abgefragt werden sind sind String !nicht Number !


    Quellcode

    1. {
    2. album = "'01'";
    3. bpm = 0;
    4. dauer = "83.85299999999999";
    5. genre = "Pop ";
    6. id = 348;
    7. interpret = "Test ";
    8. lizenztyp = "Test ";
    9. medienid = 348;
    10. name = "file_test ";
    11. origin = "7test.mp3";
    12. playlist = "aTestbezeichnung
    13. pos = 1;
    14. titel = "test";
    15. }
    Alles anzeigen
    Si tacuisses, philosophus mansisses !
  • Evtl. wurde einem der String Felder zur Laufzeit kein String zugewiesen. :/

    Wie viele Einträge hat medienlistArray?

    Kannst Du beim Erzeugen/Laden der Einträge evtl. eine Methode aufrufen, welche den Typ der String Felder prüft?

    Tritt das Problem nach Verwenden einer neuen Xcode oder macOS Version auf?