Bindings und Windows

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

  • Bindings und Windows

    Hallo,

    Habe ein Problem bei einem Beispiel im Buch Band 1 Kapitel 6. Habe das Beispie Company bis jetzt erfolgreich nachvollzogen. Ab dem Infofenster haben sich jedoch einige Fragen ergeben. Zuerst hat alles geklappt - jedoch habe ich den Shared User Defaults Controller irrtümlich gelöscht. Seit dem wird im InfoFenster nur mehr der letzte Eintrag in der Personenliste angezeigt, egal welcher tatsächlich gewählt wurde. Ich habe dann das gesamte Nibfile nochmals angelegt und erwartungsgemäß habe ich automatisch den Shared User Defaults Controller bekommen nachdem ich die Bindings neu eingegeben hatte. Leider bleibt das Ergebnis gleich. Ich erhalte bei der Ausgabe immer nur den zuletz beigefügten Namen und nicht den in der Liste gewählten. Hat hier jemand eine Erklärung, ich kann das nicht wirklich nachvollziehen???

    Der zweite Punkt ist eine Meldung im Log, die ich ebenfalls nicht verstehe: 2015-01-04 10:19:46.544 Company[31805:5386425] Layout still needs update after calling -[NSSavePanelAlertStyleContentView layout]. NSSavePanelAlertStyleContentView or one of its superclasses may have overridden -layout without calling super. Or, something may have dirtied layout in the middle of updating it. Both are programming errors in Cocoa Autolayout. The former is pretty likely to arise if some pre-Cocoa Autolayout class had a method called layout, but it should be fixed. Da diese Meldung erst nach Beendigung des Programms erscheint und ich nicht wissentlich etwas mit dem SavePanel gemacht habe, ist auch diese Meldung für mich nicht wirklich verständlich.
    LG
    Bernhard

    PS: Band 1 3.Auflage, Seite 526 f. company_08 ist auf der Website leider nicht verfügbar.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von b.brandl ()

  • Danke für die Antworten. Ich habe Eure Ratschläge versucht, jedoch ohne Erfolg. Ich habe später bei einem anderen Projekt grafisch versucht IBOutlets zu erzeugen und erhielt bei jeder property 3 Fehlermeldungen unter anderem das ein NSTextField kein gütiger Ausdruck ist, obwohl ich die Programmzeilen ja mit X-Code erzeugt habe (also auch kein Tippfehler schuld sein kann). Ich habe darauf hin X-Code deinstalliert und bin gerade dabei es neu zu laden und zu installieren. irgendwas hat da wohl einen Schaden abgekriegt. Auch die Meldung beim Schließen des Programms kam ja plötzlich und ohne große Veränderungen. Bin gespannt ob durch die neue Installation wieder alles rund läuft. Hoffe nicht, dass etwas mit meinem System nicht stimmt. Bin aber auch da dran.
    LG
    Bernhard
  • Nach einigen Versuchen habe ich wieder einiges dazugelernt:
    Die Fehlermeldungen wie oben beschreiben sind natürlich auf meinem Mist gewachsen. Beim Anlegen einer neuen Klasse mit NSObject wird nur Foundation.h automatisch eingebunden in der leider NSTextField nicht enthalten ist. Nach Korrektur (Ersatz durch Cocoa.h) hat alles perfekt funktioniert.

    Die anderen Probleme sind leider noch immer vorhanden und ich komme leider auf keinen grünen Zweig:

    Ich habe alle Dateien im Zusammenhang mit dem InfoWindow gelöscht und neu angelegt. Dabei ist der Shared User Defaults Controller neu angelegt worden. Da er selbst aber keine Bindings aufweist stellt sich für mich die Frage welche Aufgabe ihm eigentlich wirklich zukommt. Die Verbindung besteht ja hauptsächlich durch die Zeile im InfoWindowsController @property (strong) NSMangedObject *person. Fazit ist: ich bekomme immer nur die letzte Person aus dem ArrayController geliefert - egal welche Person ich im TabeleView selektiert habe.
    Hier auch nochmal der Code zum Öffnen des Fensters:

    - (void)showInfoWindowForObjects:(NSArray*)objects
    {
    PersonInfoWindowController *infoWC;
    for (NSManagedObject *object in objects){
    if ([object.entity.name isEqualToString:@"Person"]) {
    infoWC = [[PersonInfoWindowController alloc] initWithWindowNibName:@"PersonInfo"];
    infoWC.person = object;
    [self addWindowController:infoWC];
    [[infoWC window] makeKeyAndOrderFront:self];
    }
    }
    }
    Die Meldung bezüglich des NSSavePanels ist auch nicht wegzubekommen. Vielleicht habt Ihr doch noch eine Idee zu dem Problem
    :thumbsup:

    LG

    Bernhard

  • Habe alles neu eingegeben und alles funktioniert perfekt. Folgende Fehler habe ich korigiert:

    Der Shared User Defaults Controller ist eigentlich mein Fehler gewesen. Der wird automatisch angelegt, wenn man das Häckchen beim Binding setzt, ohne vorher den richtigen Controller auszuwählen.

    Im Buch lautet der Code [self.document addWindowController:infoWC]; - hier einfach document weglassen : [self addWindowController:infoWC] ist übrigens im Buch ein paar Seiten später auch korrigiert.

    Bezüglich des NSSavePanels habe ich noch keine Lösung gefunden.

    LG