Assignment to readonly property

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

Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2020 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

  • Assignment to readonly property

    Hi,
    auf der Suche nach der Verbindung arrayController mit Core Data (managedObjectContex) habe diese Methode kopiert (Developer Documentation Archive) ::

    Quellcode

    1. @interface VRDataController : NSObject
    2. @property (strong, nonatomic, readonly)NSPersistentContainer*persistentContainer;
    3. @end
    4. @implementation VRDataController
    5. - (id)init
    6. {
    7. self = [super init];
    8. if (!self) return nil;
    9. myBlock simpleBlock = ^{ printf("Success \n");};
    10. self.persistentContainer = [[NSPersistentContainer alloc] initWithName:@"Bash"];
    11. [self.persistentContainer loadPersistentStoresWithCompletionHandler:^(NSPersistentStoreDescription *description, NSError *error) {
    12. if (error != nil) {
    13. NSLog(@"Failed to load Core Data stack: %@", error);
    14. abort();
    15. }
    16. simpleBlock();
    17. }];
    18. return self;
    19. }
    Alles anzeigen
    und bekomme die Fehlermeldung 'Assignment to readonly property' .
    Ich wage nicht das readonly zu löschen, da ja der persistentContainer nach der Einrichtung des Projekts schon implementiert war.

    Ich hoffe ihr wisst eine Lösung, vielleicht eine einfacheren Weg um an den context zu kommen !

    Uwe
    Als ich ein kleiner Junge war, habe ich mir gedacht: Wenn ich groß bin möchte ich so sein wie ich.
  • Anstatt per self.persistentContainer den Getter/Setter des Property zu verwenden, kannst Du mit _persistentContainer auch direkt auf die Property Variable zugreifen.

    Also:

    Quellcode

    1. - (id)init
    2. {
    3. self = [super init];
    4. if (!self) return nil;
    5. myBlock simpleBlock = ^{ printf("Success \n");};
    6. _persistentContainer = [[NSPersistentContainer alloc] initWithName:@"Bash"];
    7. [_persistentContainer loadPersistentStoresWithCompletionHandler:^(NSPersistentStoreDescription *description, NSError *error) {
    8. if (error != nil) {
    9. NSLog(@"Failed to load Core Data stack: %@", error);
    10. abort();
    11. }
    12. simpleBlock();
    13. }];
    14. return self;
    15. }
    Alles anzeigen
  • Danke McDan, das hat geholfen.
    Nun habe ich eine runtime error bekommen : Failed to load model named Bash: Ich habe irgendwo gelesen, dass das der Projektname ist,
    offensichtlich falsch.. Kannst du da auch helfen ?
    Als ich ein kleiner Junge war, habe ich mir gedacht: Wenn ich groß bin möchte ich so sein wie ich.
  • September schrieb:

    Nun habe ich eine runtime error bekommen : Failed to load model named Bash: Ich habe irgendwo gelesen, dass das der Projektname ist,

    offensichtlich falsch..
    Es geht bei diesem Namen nicht um den Projektnamen, sondern den Deines Core-Data-Models. Ich vermute, dass es in Deinem Xcode-Project eine .xcdatamodeld-Datei gibt, in der Du das Datenmodel, also die Entities, Attribute und Relationen beschrieben hast. Diese Datei stellt die Grundlage für den Objekt-Graphen dar, der mit dem NSPersistentContainer abgebildet wird. Höchstwahrscheinlich heisst diese Datei bei Dir nicht "Bash" ... im Zweifelsfall schau auch mal in den Attributen dieser Datei auf den Identifier des Core-Data-Models (falls gesetzt).

    Das readonly-Property erklärt sich dadurch, dass der NSPersistentContainer standardmäßig in seinem Getter instanziert und dort dann natürlich über die o. g. Instanz-Variable referenziert wird.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • September schrieb:

    auf der Suche nach der Verbindung arrayController mit Core Data (managedObjectContex) ...
    Nur als Tipp - sorry, wenn es Dir bekannt ist: Es könnte ein NSFetchedResultsController interessant sein, wenn Du auf Basis von Core-Data-Ergebnissen beispielsweise Tabellen aufbauen willst: Dessen Implementierung erleichtert z. B. das Händling von Hintergrundaktualisierungen der Daten enorm.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Hallo Mattes,
    den richtigen Namen hab' ich gefunden, es ist der FileName 'Document' des Projekts. Damit hatte der Erfolg ein Ende.
    Der TableView war leer und add und remove haben nichts gebracht (Bindings o.k.)
    Dann habe ich mir den Bindings Inspector angeschaut : die Attribute habe ich an ArrayController gebunden, das Controller Key Feld war gesperrt, Model Key Path konnte ich verwenden.
    Für managedObjectContext gab's kein Binding, nur ein Outlet.

    Ich bin wieder mal mit meinem Latein am Ende.

    Uwe
    Als ich ein kleiner Junge war, habe ich mir gedacht: Wenn ich groß bin möchte ich so sein wie ich.