Core Data, Buch 1 Aufl. 3, Seite 601 bis 604

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

  • Core Data, Buch 1 Aufl. 3, Seite 601 bis 604

    Ich stehe an dieser Stelle vor einem Problem. Die Downloads auf der Webseite sind unvollständig, warum eigentlich? Das Kapitel 7 ist dort nicht zu finden, bei Kapitel 8 bin ich noch nicht, aber auch dort gibt es keine Projekte zu.

    Komme ich zum Problem. Ich habe das, soweit auf den Seiten 601 bis 604 beschrieben wurde, durchgeführt.

    Das Projekt lässt einen Build zu. Starte ich jedoch das Projekt, kommt ein Fehler im Log.

    2015-03-22 11:33:12.339 Document[919:170330] -[__NSArrayM persistentStoreCoordinator]: unrecognized selector sent to instance 0x60800005b0c0

    Ich habe die Bindings kontrolliert und auch das Projekt neu angelegt. Ebenfalls die Tabelle eingefügt und die Spalten per Value-Binding an den Persons Controller gebunden. Key ist arrangedObjects und Key Path ist firstName bzw. lastName.

    Habe ich vielleicht was falsch gemacht? Auf Seite 604 ist das ja recht kurz nur beschrieben. Man muss ja auch was selber machen, ist klar, aber nicht in die Beispielprojekte reinschauen zu können ist echt Mist.

    Gruß
  • Vorweg: Meine Schilderung ist mit Buch sicherlich verständlicher.

    Breakpoint hatte ich gesetzt. Nur an der Stelle wo die Log-Ausgaben kommen, kann ich nichts wirklich machen. Das ist im AppKit -[NSDocumentController openUntitledDocumentAndDisplay:error:]:

    Der Editor in Xcode mit der Stelle:

    0x7fff93957a38: movq %r15, %rdi
    0x7fff93957a3b: callq *%rbx
    0x7fff93957a3d: movq -0x185a4efc(%rip), %rsi ; "showWindows"
    0x7fff93957a44: movq %r15, %rdi
    0x7fff93957a47: callq *%rbx

    Da ich noch recht unsicher mit dem Debugger und dem Verständnis bin, kann ich dazu nicht viel sagen. Auch das Objekt persistentStoreCoordinator habe ich nicht angelegt.

    Was macht man auf den Seiten ist daher sicherlich die Frage. Man legt ein neues Projekt an, dokumentenbasiert und ohne Core Data. In der Klasse Document kommt in .h-Datei ein

    Quellcode

    1. @property (copy) NSArray *persons;
    Die .m-Datei erweitert man mit

    Quellcode

    1. @implementation Document {
    2. NSMutableArray *_persons;
    3. }
    4. - (NSArray*) persons { return _persons;}
    5. - (void) setPersons:(NSArray *)values {
    6. _persons = [values mutableCopy];
    7. }
    8. - (id) init {
    9. self = [super init];
    10. if (self != nil) {
    11. NSLog(@"In Init Document");
    12. self.persons = [NSArray array];
    13. }
    14. return self;
    15. }
    16. ...
    17. - (void) makeWindowControllers
    18. {
    19. NSWindowController *windowController
    20. = [[NSWindowController alloc] initWithWindowNibName:self.windowNibName];
    21. [self addWindowController:windowController];
    22. }
    Alles anzeigen
    Bei ... ist der Standardcode vom Template des Projektes enthalten.
    Im Interfacebuilder lege ich ein ArrayController an. Eine Table View mit zwei Buttons zum add: und remove: des Array Controllers.
    Eine weiter Klasse lege ich an mit:

    Quellcode

    1. #import <Foundation/Foundation.h>
    2. @interface Person : NSObject
    3. @property (copy) NSString *firstName;
    4. @property (copy) NSString *lastName;
    5. @end
    6. // danach m.Datei
    7. #import "Person.h"
    8. @implementation Person
    9. - (id) init
    10. {
    11. self = [super init];
    12. if (self) {
    13. self.firstName = @"";
    14. self.lastName = @"N.N.";
    15. }
    16. return self;
    17. }
    18. @end
    Alles anzeigen
    An sich nichts besonderes.
    Bindings sind ArrayController bei Managed Object Kontext
    Bint to: Files Owner
    MKP: document.persons

    und die Table Columns jeweils in Value
    Bind to: Persons Controller (so heißt der ArrayController)
    Controller Key: Arraged Objects
    MKP: firstName bzw. lastName

    Habe ich vielleicht was übersehen beim Binden oder gar falsch gemacht? Eine Klasse Model habe ich nicht angelegt, im Buch wird es als Tipp empfohlen, jedoch für das Thema nicht gemacht.

    Gruß

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von nocturnal ()

  • ioscampus schrieb:

    Was ist persistentStoreCoordinator für ein Objekt?
    Gar keins, das ist eine Nachricht/Methode. Die wird hier an ein Array geschickt, welches die Methode nicht kennt.

    nocturnal schrieb:

    Man legt ein neues Projekt an, dokumentenbasiert und ohne Core Data.

    nocturnal schrieb:

    Bindings sind ArrayController bei Managed Object Kontext
    Das passt beides nicht zusammen. Einen „Managed Object Context“ gibt es nur, wenn du Core Data verwendest.
    Statt des „Managed Object Context“ musst du unter „Controller Content“ das „Content Array“ binden.
  • Michael schrieb:

    Das passt beides nicht zusammen. Einen „Managed Object Context“ gibt es nur, wenn du Core Data verwendest.Statt des „Managed Object Context“ musst du unter „Controller Content“ das „Content Array“ binden.

    Vielen Dank. Das löst mein Problem. Das habe ich so nicht aus dem Satz im Buch gelesen das man das Content Array nimmt. War mir auch recht unsicher bei Managed Object Context, alleine weil es gedanklich nicht passte.

    Dennoch, mit dem Beispielen von Amin Negm-Awad wäre die Frage überflüssig gewesen.