Core Data, Drag&Drop und Reference Counting

  • Dort wird es aufgerufen:

    Quellcode

    1. - (IBAction) addSubject: (id) sender {
    2. NSTreeNode* selectedNode = [sidebarView itemAtRow: [sidebarView selectedRow]];
    3. id item = [selectedNode representedObject];
    4. if ( [item isKindOfClass: [ALSubject class]] ) {
    5. selectedNode = [selectedNode parentNode];
    6. item = [selectedNode representedObject];
    7. }
    8. ALSubject* newSubject = [NSEntityDescription insertNewObjectForEntityForName: @"Subject" inManagedObjectContext: context];
    9. [newSubject setName: @"Neues Fach"];
    10. ALClass* parentClass = item;
    11. [parentClass addEntityChildrenObject: newSubject];
    12. }
    Alles anzeigen


    Und so sieht der Accessor aus:

    Quellcode

    1. - (void) addEntityChildrenObject: (ALSubject*) value {
    2. NSString* const keyName = @"entityChildren";
    3. [self willChangeValueForKey: keyName];
    4. [[self primitiveValueForKey: keyName] addObject: value];
    5. [self didChangeValueForKey: keyName];
    6. [keyName release];
    7. }
  • Wie schon weiter oben erwähnt, die accessor -addEntityChildrenObject: ist völlig unnötig, @dynamic und den von CD zur Verfügung gestellten benutzen reicht.

    Bist Du sicher, dass in Deinem Baum auch wirklich ALClass Objekte dargestellt werden, d.h. dass hier

    Quellcode

    1. if ( [item isKindOfClass: [ALSubject class]] ) {
    2. selectedNode = [selectedNode parentNode];
    3. item = [selectedNode representedObject];
    4. }
    5. ...
    6. ALClass* parentClass = item;

    nicht doch etwas schief geht? Am besten, Du postest mal ein kleines Demoprojekt.
  • Es sind definiv ALClass Objekte. Das sehe ich ja im Log. Ich überprüfe auch noch, welche Klasse item hat. Hab das nur beim Post weggelassen, weil es für meine Frage unerheblich ist. Wenn Du sagst, ich solle nur @dynamic benutzen, dann müsste ich entsprechend so Objekte in die Relationships einfügen:

    Quellcode

    1. ALClass* aClass;NSMutableSet* subjects = [aClass mutableSetValueForKey: @"entityChildren"];[subjects addObject: aSubject];



    Verstehe ich Dich da richtig? Core Data erzeugt mir ja nur die Standard-Accesoren..

    ByTheWay: So wie oben mit mutableSetValueForKey klappt es auch..
  • alexlaske schrieb:

    Es sind definiv ALClass Objekte. Das sehe ich ja im Log. Ich überprüfe auch noch, welche Klasse item hat. Hab das nur beim Post weggelassen, weil es für meine Frage unerheblich ist. Wenn Du sagst, ich solle nur @dynamic benutzen, dann müsste ich entsprechend so Objekte in die Relationships einfügen:

    Quellcode

    1. ALClass* aClass;NSMutableSet* subjects = [aClass mutableSetValueForKey: @"entityChildren"];[subjects addObject: aSubject];



    Verstehe ich Dich da richtig? Core Data erzeugt mir ja nur die Standard-Accesoren..

    a) Du solltest am besten überhaupt nur so einfügen. Dafür sind ja die Mutator-Methods von KVC da.

    b) Du brauchst keine Accessoren bei CD, da diese zur Laufzeit automatisch generiert werden. CD bringt da schon alles mit. Du brauchst das daher nur, wenn du Accessoren oder Dot-Notation explizit nutzen willst.

    Nichtsdestotrotz müsste das funktionieren. Das wundert mich halt. Projekt hochladen?
    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"?
  • Du musst den build-Ordner löschen.
    Es reicht, wenn Du die Deklarationen im Headerfile einfügst und die Implementation weglässt (lediglich @dynamic propertyName), dann kannst Du trotzdem Dot-Notation benutzen. Also genauso, wie es Xcode beim Erstellen einer MO-Subklasse macht.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Markus Müller () aus folgendem Grund: typo

  • Und dann scheinst Du ein grundlegendes Verständnisproblem von CoreData zu haben.
    Du legst die im Modeller definierten Properties als ivars an, das ist im besten Fall unnötig (wahrscheinlicher ist, dass bei der Entwicklung alles zu klappen scheint, es aber bei der Kundenpräsentation zu Seiteneffekten mit CD kommt).
    NSManagedObject implementiert nicht das NSCopying-Protokoll, copyWithZone: (und die Iteration über Deine MO-Objekte) ist ebenfalls falsch.

    All diesen Kram nimmt Dir Core Data ab (jetzt machst Du all das wieder von Hand). Du definierst Deine relationships und properties, mit ivars (wenn CD dass überhaupt so umsetzt) hast Du nix zu tun. Du greifst auf die properties über die Accesoren zu, und nur darüber (sowie KVC, was auf das gleiche hinausläuft).

    Wahrscheinlich solltest Du nochmal den Core Data Programming Guide lesen.
  • alexlaske schrieb:

    Sorry, hatte den falschen Ordner genommen. Diese Version funktioniert bei mir. Um die Warnings kümmere ich natürlich noch. Waren allerdings auch viele, wo einfach Variablen nicht genutzt wurden, wo ich vorher was experimentiert hatte..

    Funktioniert bei mir ebenfalls nicht. Deine Einstellung zu Warnings ist sehr optimistisch. Um die musst Du Dich zu allererst kümmern (auf jeden Fall bevor Du hier das Projekt postest). Am besten gleich Warnung als Fehler im Projekt aktivieren.
  • Quellcode

    1. run
    2. [Switching to process 880]
    3. Running…
    4. 2010-08-30 13:28:36.537 Teacher Helper NoDoc[880:a0f] Could not connect the action changePanes: to target of class AppDelegate
    5. 2010-08-30 13:28:36.559 Teacher Helper NoDoc[880:a0f] Awake
    6. 2010-08-30 13:28:46.432 Teacher Helper NoDoc[880:a0f] HIToolbox: ignoring exception '*** -[NSCFString substringWithRange:]: Range or index out of bounds' that raised inside Carbon event dispatch
    7. (
    8. 0 CoreFoundation 0x00007fff848f0cc4 __exceptionPreprocess + 180
    9. 1 libobjc.A.dylib 0x00007fff872c60f3 objc_exception_throw + 45
    10. 2 CoreFoundation 0x00007fff848f0ae7 +[NSException raise:format:arguments:] + 103
    11. 3 CoreFoundation 0x00007fff848f0a74 +[NSException raise:format:] + 148
    12. 4 Foundation 0x00007fff8126aecc -[NSCFString substringWithRange:] + 131
    13. 5 Teacher Helper NoDoc 0x0000000100002d18 -[ALEditClassPanel createClassIDForClass:] + 219
    14. 6 Teacher Helper NoDoc 0x0000000100002c1e -[ALEditClassPanel addClassToSchoolyear:withGradeLevel:andSuffix:] + 368
    15. 7 Teacher Helper NoDoc 0x0000000100002feb -[ALEditClassPanel performButtonClicked:] + 339
    16. 8 AppKit 0x00007fff86231152 -[NSApplication sendAction:to:from:] + 95
    17. 9 AppKit 0x00007fff862310b1 -[NSControl sendAction:to:] + 94
    18. 10 AppKit 0x00007fff862bca0b -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 1715
    19. 11 AppKit 0x00007fff862ed536 -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 555
    20. 12 AppKit 0x00007fff862bb4b5 -[NSControl mouseDown:] + 624
    21. 13 AppKit 0x00007fff861d5763 -[NSWindow sendEvent:] + 5409
    22. 14 AppKit 0x00007fff8610aee2 -[NSApplication sendEvent:] + 4719
    23. 15 AppKit 0x00007fff86316f16 -[NSApplication _realDoModalLoop:peek:] + 509
    24. 16 AppKit 0x00007fff86314a61 -[NSApplication runModalForWindow:] + 129
    25. 17 Teacher Helper NoDoc 0x0000000100003fe7 -[ALMainWindowWC editClassDetailsWindow:] + 562
    26. 18 AppKit 0x00007fff86231152 -[NSApplication sendAction:to:from:] + 95
    27. 19 AppKit 0x00007fff862556be -[NSMenuItem _corePerformAction] + 365
    28. 20 AppKit 0x00007fff86255428 -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:] + 121
    29. 21 AppKit 0x00007fff864d941d -[NSMenu _internalPerformActionForItemAtIndex:] + 35
    30. 22 AppKit 0x00007fff8638b217 -[NSCarbonMenuImpl _carbonCommandProcessEvent:handlerCallRef:] + 136
    31. 23 AppKit 0x00007fff86237c14 NSSLMMenuEventHandler + 321
    32. 24 HIToolbox 0x00007fff83b89997 _ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec + 1002
    33. 25 HIToolbox 0x00007fff83b88ee6 _ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec + 395
    34. 26 HIToolbox 0x00007fff83ba6ba9 SendEventToEventTarget + 45
    35. 27 HIToolbox 0x00007fff83bd5cd1 _ZL18SendHICommandEventjPK9HICommandjjhPKvP20OpaqueEventTargetRefS5_PP14OpaqueEventRef + 387
    36. 28 HIToolbox 0x00007fff83c02b06 SendMenuCommandWithContextAndModifiers + 56
    37. 29 HIToolbox 0x00007fff83c02abe SendMenuItemSelectedEvent + 101
    38. 30 HIToolbox 0x00007fff83c029be _ZL19FinishMenuSelectionP13SelectionDataP10MenuResultS2_ + 150
    39. 31 HIToolbox 0x00007fff83d0ba75 _ZL19PopUpMenuSelectCoreP8MenuData5PointdS1_tjPK4RecttjS4_S4_PK10__CFStringPP13OpaqueMenuRefPt + 1618
    40. 32 HIToolbox 0x00007fff83d0bdce _HandlePopUpMenuSelection7 + 665
    41. 33 AppKit 0x00007fff863881c9 _NSSLMPopUpCarbonMenu3 + 3710
    42. 34 AppKit 0x00007fff86537d0e -[NSPopUpButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 554
    43. 35 AppKit 0x00007fff862bb4b5 -[NSControl mouseDown:] + 624
    44. 36 AppKit 0x00007fff861d5763 -[NSWindow sendEvent:] + 5409
    45. 37 AppKit 0x00007fff8610aee2 -[NSApplication sendEvent:] + 4719
    46. 38 AppKit 0x00007fff860a1922 -[NSApplication run] + 474
    47. 39 AppKit 0x00007fff8609a5f8 NSApplicationMain + 364
    48. 40 Teacher Helper NoDoc 0x00000001000015e5 main + 33
    49. 41 Teacher Helper NoDoc 0x00000001000015bc start + 52
    50. 42 ??? 0x0000000000000001 0x0 + 1
    51. )
    52. Program received signal: “EXC_BAD_ACCESS”.
    53. sharedlibrary apply-load-rules all
    Alles anzeigen

    Das zum Thema 'geht jetzt'.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • /* com.apple.ibtool.document.notices */
    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/English.lproj/MainMenu.xib:530: note: This view is clipping its content.
    /* com.apple.ibtool.document.warnings */
    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/English.lproj/MainMenu.xib:205: warning: The 'treeController' outlet of 'AppDelegate' is connected to 'SourceView Controller' but 'treeController' is no longer defined on AppDelegate.
    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/English.lproj/MainMenu.xib:205: warning: The 'selectionController' outlet of 'AppDelegate' is connected to 'Selected Outline View Item Controller' but 'selectionController' is no longer defined on AppDelegate.
    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/English.lproj/MainMenu.xib:205: warning: The 'changePanes:' action of 'AppDelegate' is connected to 'Change Views Pop Up Button' but 'changePanes:' is no longer defined on 'AppDelegate'.
    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/English.lproj/MainMenu.xib:205: warning: The 'sidebarView' outlet of 'AppDelegate' is connected to 'Outline View' but 'sidebarView' is no longer defined on AppDelegate.

    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/ALClass.m: In function '-[ALClass copyWithZone:]':
    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/ALClass.m:42: warning: 'ALStudent' may not respond to '-copyWithZone:'
    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/ALClass.m:42: warning: (Messages without a matching method signature
    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/ALClass.m:42: warning: will be assumed to return 'id' and accept
    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/ALClass.m:42: warning: '...' as arguments.)
    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/ALClass.m: At top level:
    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/ALClass.m:55: warning: incomplete implementation of class 'ALClass'
    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/ALClass.m:55: warning: method definition for '-removeEntityChildrenObject:' not found
    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/ALClass.m:55: warning: method definition for '-addEntityChildrenObject:' not found


    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/ALSubject.m:53: warning: incomplete implementation of class 'ALSubject'
    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/ALSubject.m:53: warning: method definition for '-removeStudentsInSubjectObject:' not found
    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/ALSubject.m:53: warning: method definition for '-addStudentsInSubjectObject:' not found


    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/ALSchoolyear.m:14: warning: incomplete implementation of class 'ALSchoolyear'
    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/ALSchoolyear.m:14: warning: method definition for '-removeEntityChildrenObject:' not found
    /Users/mafe/Downloads/Teacher Helper NoDoc 2-1/ALSchoolyear.m:14: warning: method definition for '-addEntityChildrenObject:' not found

    Das zum Thema 'unbenutzte Variablen'.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Markus Müller schrieb:

    Und dann scheinst Du ein grundlegendes Verständnisproblem von CoreData zu haben.
    Du legst die im Modeller definierten Properties als ivars an, das ist im besten Fall unnötig (wahrscheinlicher ist, dass bei der Entwicklung alles zu klappen scheint, es aber bei der Kundenpräsentation zu Seiteneffekten mit CD kommt).
    NSManagedObject implementiert nicht das NSCopying-Protokoll, copyWithZone: (und die Iteration über Deine MO-Objekte) ist ebenfalls falsch.

    All diesen Kram nimmt Dir Core Data ab (jetzt machst Du all das wieder von Hand). Du definierst Deine relationships und properties, mit ivars (wenn CD dass überhaupt so umsetzt) hast Du nix zu tun. Du greifst auf die properties über die Accesoren zu, und nur darüber (sowie KVC, was auf das gleiche hinausläuft).

    Wahrscheinlich solltest Du nochmal den Core Data Programming Guide lesen.

    So etwas dachte ich mir schon die ganze Zeit, weil er da immer selbst noch etwas einhackte.

    @OP Schau doch noch einmal in das allererste Projekt. Siehst du da was von Ivars oder Accessoren?

    Der Modeller ist kein Code-Generator. Der macht das zur Laufzeit alles dynamisch und selbständig.
    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"?
  • So, das waren klare Antworten. Dass da noch nicht das volle Verständnis bei mir da ist, ist ja klar, weil ich vor zwei Monaten das erste Mal XCode geöffnet habe..

    Ich habe mir jetzt noch mal den CD-Programming Guide zu Gemüte geführt und Einiges angepasst. Ich habe Treat Warnings as Errors aktiviert und das Projekt läuft jetzt bei mir erstmal so weit.

    Es wäre nett, wenn Ihr mir n kurzes Feedback geben könntet, ob es jetzt Core Data-mäßig erstmal so in Ordnung ist. Dann schau ich mal weiter; ich bin mir sicher, dass noch weitere Fragen auftreten werden.

    Sorry, wenn ich Euch mit für Euch klaren Dingen nerve, aber irgendwie muss ich ja mal anfangen..

    Vielen Dank schon mal.
  • Da es ein iPhone-Projekt ist, kann ich das nicht anschauen. Aber zum Letzten: Kein Problem, das war ein klares Verständnisproblem und du hast es selbst zu lösen versucht. Genau so sollte das in einem Forum sein. Vorbildlich!
    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"?