Frage zu S.486

  • Frage zu S.486

    Ich wollte ein neues nib-File anlegen, wie in Kap. 6, S. 486 beschrieben:
    1. Ressources in Groups&Files angewählt
    2. im Menu File/NewFile angeklickt
    Dann kann ich unter Cocoa keine Window xib, bzw nib finden.

    Deshalb Frage: Wie kann ich (unter Tiger) ein neues nib-File anlegen?
  • RE: Frage zu S.486

    Original von Luigi
    Ja, Tiger. Bis Seite 485 hat es ja recht gut funktioniert. Ich musste nur wenig Leopard-spezifisches auslassen; und ein paar Umwege machen. Bis jetzt habe ich es also selber geschafft; jetzt brauche ich eben Hilfe.


    Wäre es nicht mal an der Zeit auf Leopard/Snow Leopard zu wechseln? Ich selbst habe kein Tiger mehr da und kann daher nicht nachschauen, wie man das genau gemacht hat. Kannst du mal einen Screenshot hochladen?
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • RE: Frage zu S.486

    Öffne den IB aus Xcode und mache dort in File|New ein neues Nib (Xibs gab es damals noch nicht) mit Window als Vorlage. Auf Nachfrage füge das in dein Xcode-Projekt ein.

    So müsste es gewesen sein, wenn ich das in der alten Auflage nach der Entfernung des Staubes *hust* richtig gesehen habe.

    Allerdings würde ich dir auch dringend anraten zu modernisieren.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: Frage zu S.486

    Herzlichen Dank. Ich habe mein neues nib-File (Person.nib). Wenn ich nun den Window Controller anmelden möchte und dazu den File's Owner anwähle, so kann ich im Inspector unter ClassName meine neue Klasse PersonInfoWC nicht eintragen. Das Feld erscheint grau.

    Ich möchte ja schon modernisieren. Aber ich arbeite auf dem Firmen-Laptop und die Firma hat auf ihren Maschinen immer noch Tiger. ich werd's meinem Chef mal weitersagen!?
  • RE: Frage zu S.486

    Original von Luigi
    Herzlichen Dank. Ich habe mein neues nib-File (Person.nib). Wenn ich nun den Window Controller anmelden möchte und dazu den File's Owner anwähle, so kann ich im Inspector unter ClassName meine neue Klasse PersonInfoWC nicht eintragen. Das Feld erscheint grau.

    Ich möchte ja schon modernisieren. Aber ich arbeite auf dem Firmen-Laptop und die Firma hat auf ihren Maschinen immer noch Tiger. ich werd's meinem Chef mal weitersagen!?

    Du musst beim alten IB die Klasse explizit einlesen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: Frage zu S.486

    Ich habe im IB "Read Files" angewählt und PersonInfoWC.h eingelesen. Dann erscheint tatsächlich im Info-Pane PersonInfoWC und im Outlet window. Aber ich kann das ganze nicht speichern, d. h. nachher von File's Owner auch kein Outlet zum Fenster Person ziehen.

    Und jetzt?
  • Original von Luigi
    Herzlichen Dank für die Hilfe; das nib-file ist da, das person-Fenster öffnet auf Knopfdruck.

    Frage zu S. 491: die "for in" Funktion ist wohl nur für C-2, oder?

    Objective-C 2 – so viel Zeit sollte sein. ;)

    Ja, S. 165, 322

    Original von Luigi
    Allen ein gutes neues 2010!

    Danke, dir auch.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Ich habe folgendes gemäss S. 322 versucht:

    - (void)showInfoWindowForPerson:(NSManagedObject*)person
    {
    NSWindowController* wc;
    PersonInfoWC* personWC = nil;
    NSManagedObjectID* personID = [person objectID];
    NSEnumerator* itemsEnum = [[self windowControllers] objectEnumerator];
    id object;
    // Alle bestehenden Window-Cotnroller ueberpruefen
    //for( wc in [self windowControllers] ) {
    while( ( object = [itemsEnum nextObject]) ) {
    // Ist es ueberhaupt ein Person-Info-WC?
    if( [wc isKindOfClass:[PersonInfoWC class]] ) {
    personWC = (PersonInfoWC*)wc;

    // Hat er dieselbe Person-ID?
    if( [[personWC.person objectID] isEqualTo:personID] ) {
    //////////
    break;
    //////////
    }
    }
    }

    Dabei meldet er aber zu " if( [[personWC.person objectID] isEqualTo:personID] ) {"

    error: request for member 'person' in something not a structure or union

    Wie muss ich diese Ziele schreiben?
  • Ich habe das Buch leider nicht vor mir, aber dein Problem scheint nicht in dieser Funktion zu sein. Sieh mal nach, ob die Klasse PersonInfoWC wirklich eine Instanzvariable namens "person" besitzt.
    Im übrigen ist dir die Übertragung der fast enumeration zur alten Methode nicht ganz gelungen.

    Quellcode

    1. - (void)showInfoWindowForPerson:(NSManagedObject*)person
    2. {
    3. NSWindowController * wc;
    4. NSEnumerator * wcEnum = [[self windowControllers] objectEnumerator];
    5. PersonInfoWC * personWC = nil;
    6. NSManagedObjectID * personID = [person objectID];
    7. // Alle bestehenden Window-Cotnroller ueberpruefen
    8. while (wc = [wcEnum nextObject])
    9. {
    10. // Ist es ueberhaupt ein Person-Info-WC?
    11. if ([wc isKindOfClass:[PersonInfoWC class]])
    12. {
    13. personWC = (PersonInfoWC *)wc;
    14. // Hat er dieselbe Person-ID?
    15. if ([[personWC.person objectID] isEqualTo:personID])
    16. {
    17. //////////
    18. break;
    19. //////////
    20. }
    21. }
    22. }
    23. ...
    Alles anzeigen
    Vergleiche mal diesen Code mit der Originalversion (und vllt. auch mit deiner eigenen). Im übrigen hoffe ich, dass ich hier keinen Mist zusammengeschrieben habe, da ich das ganze nicht überprüft habe :)


    Teddy

    PS: Code-Tags sind etwas schönes, nicht? ;)
  • Original von Teddy
    Ach so. Was würde denn der Compiler melden, wenn die Instanzvariable fehlen würde? *ausprobier*


    Teddy

    Außerhalb der Klasse ist das Vorhandensein der Ivar unerheblich. Man könnte hier zwar noch an public denken, dann müsste man aber anders dereferenzieren.

    Er würde einfach in der entsprechenden Klasse anmeckern, dass er keine Ivar für die Property hat – es sei denn, es wäre mit 64 Bit compiliert. Dann würde er sie brav anlegen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Hab das jetzt mal kurz ausprobiert und bei mir kommt beim fehlen einer Ivar genau dieser Fehler, über den Luigi auch gestolpert ist: "Request for member 'instanzvariable' in something not a structure or union".
    Wenn ich allerdings einfach die Accessoren weglasse, bekomme ich: "Accessing unknown 'instanzvariable' getter method" oder "Object cannot be set - either readonly property or no setter found" also schön aussagekräftige Hinweise auf den Fehler :)

    Falls ich jetzt mit anderen Worten einfach nochmals wiederholt habe, was du gerade geschrieben hast Amin, dann tut es mir Leid, aber von deiner Aussage habe ich vielleicht etwa 50% verstanden :rolleyes:


    Teddy