Probleme beim Auslesen, Weitergeben und Speichern von BOOL-Werten und Weitergabe über mehrere Views

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

  • Probleme beim Auslesen, Weitergeben und Speichern von BOOL-Werten und Weitergabe über mehrere Views

    Hi Zusammen und schon mal vielen Dank für jeglichen Hinweis!

    ich beschreib mal erst die Umgebung und dann die Frage ...

    Umgebung
    (1) Zwei fast identische Tableviews der eine holt sich Daten aus Core Data mit dem Boolschen Wert "Yes" der andere mit "No"
    MeinsRootViewController (Wert = YES)

    DeinsRootViewController (Wert = NO)


    BOOL myBool = YES; // YES bedeutet, dass es sich um meinen Gegenstand handelt, den ich verliehen habe

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"verliehen == %d", [NSNumber numberWithBool:myBool]];


    (2) Jeder dieser TableViews hat einen Add-Button (um einen neuen Eintrag anzulegen). In der Add-Button-Methode wird ein neuer View (vsc) aufgerufen und ein Flag (0[No] oder 1[YES]) zur Unterscheidung mitgeben. Für den TableView "MeinsRootViewController" hab ich dann folgenden Code zum Aufruf des Views eingetragen:

    vsc.verliehen = [NSNumber numberWithInt:1];


    (3) Der View ist quasi nur eine Grouped TableStyle. Die einzelnen Spalten rufen neue Views zum Editieren auf. Jetzt soll immer - abhängig - von dem in (2) übergebenen Wert in CoreData entweder YES oder NO abgespeichert werden. Damit kann ich sowohl den zentralen Views (siehe (2) vsc) und die Editerviews dynamisch halten (so der Plan und der Code):

    if (verliehen == [NSNumber numberWithInt:1]) {
    BOOL myBool = YES;
    [managedStuffObject setVerliehen:[NSNumber numberWithBool:myBool]];
    }
    else {
    BOOL myBool = NO;
    [managedStuffObject setVerliehen:[NSNumber numberWithBool:myBool]];
    }



    FRAGE/PROBLEM
    irgendwo scheint ein Fehler zu sein. Im obrigen Beispiel (1-3) soll der BOOL-Wert eigentlich auf YES in CoreData abgespeichert werden und mittels Predicate siehe (1) nur dort angezeigt werden. Tatsächlich ist in dem MeinsRootViewController nichts drin und alles im "DeinsRVC" (den hab ich allerdings auch ohne Predicate - also Filter - zum Test laufen). Bin mir jetzt nicht so sicher was falsch ist.
    - NSPredicate?
    - Der Umgang mit NSNumber und BOOL?
    - Die Übergabe der Werte in den Views?


    Danke für Eure Hilfe.
    ichessetoast
    ----
    Macht's gut und danke für den Fisch
  • Quellcode

    1. if (verliehen == [NSNumber numberWithInt:1])

    Hier vergleichst Du zwei unterschiedliche Objekte, daher gibt die Bedingung immer falsch zurück. Möglicherweise geht isEqual: oder eine vergleichende Methode des WERTES von NSNumber.

    Ich würde das aber komplett anders machen. Der Nachteil Deines Ansatzes ist, dass Du beim Besitzwechsel immer zwei Properties anpassen musst. Ich würde das so machen:
    Entity: Ich
    Entity: Jemand
    Entity: verleihbares Objekt
    Ich hat eine Relationship zu verleihbares Objekt namens "Eigentum (im Plural wenn's geht).
    Verleihbares Objekt hat eine Relationship zu "im Besitz von". Nur diese Relationship brauchst Du zu setzen. Ist diese nil, ist das Objekt nicht verliehen.

    Und schon bist Du die ganzen Bools los, die Dir ohnehin nichts hilft, wenn Du später wissen willst, AN WEN das Objekt verliehen wurde.

    No.
  • Hallo No.

    Danke für beide Tipps :)
    Hatte tatsächlich auch erst überlegt, ob ich drei Entities mache - hatte mich dann dagegen entscheiden und das "Namensfeld" (gibt es auch noch) durch den Zusatz Bool-Flag als "verliehen" oder "geliehen" markiert. Damit hatte ich mir das komplexere Modell gespart. Aber so nachbetrachtend scheint Deine Variante doch besser zu sein.

    Okay, dann probier ich das mal mit dem Relationships .. und als Lerneffekt natürlich auch mit dem Vergleich.

    Gruß iet
    ----
    Macht's gut und danke für den Fisch