Core Data & Managed Object Drag

  • Core Data & Managed Object Drag

    Ich hab ne CoreData App die Kategorien und Skripte verwaltet. Jetzt möchte ich die Skripte auf die Kategorien droppen, um so ne Art Playlistfunktion zu realisieren. Klappt auch prima, bis auf die Frage nach der sinnvollsten Implementierung für den Drag & Drop.

    Ich hab nun im NSTableView.h folgendes gelesen:
    Compatability Note: This method replaces tableView:writeRows:toPasteboard:. If present, this is used instead of the deprecated method.

    Quellcode

    1. */
    2. - (BOOL)tableView:(NSTableView *)tv
    3. writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard*)pboard;

    Also die hier soll man nicht mehr nehmen:

    Quellcode

    1. - (BOOL)tableView:(NSTableView *)tv writeRows:(NSArray*)rows toPasteboard:(NSPasteboard*)pboard;

    Jetzt hätte ich aber gerne auch die URLS der zu droppenden ManagedObjects (Scripte) ins Pasteboard geschrieben. Das geht aber mit dem NSIndexSet nicht mehr. Ist es sinnvoll, zusätzlich noch ein Array mit den URL's ins Pasteboard zu schreiben? Und ist es nicht etwas gefährlich, wenn man sich auf die Indizes verläßt? Wie würdet Ihr das machen? ?(
  • Hmm, bei mir geht das ganz einfach. Ich habe meine NSManagedObjects in einem NSArrayController liegen, den kann ich dann ganz einfach in der fraglichen Methode um die entsprechenden Objekte bitten:

    Quellcode

    1. - (BOOL)tableView:(NSTableView *)tv writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard*)pboard
    2. {
    3. [pboard declareTypes:[NSArray arrayWithObjects:myType, nil] owner:self];
    4. NSArray *items = [[myArrayController arrangedObjects] objectsAtIndexes:rowIndexes];
    5. NSArray *itemURLS = [NSArray arrayWithObjects:items performSelector:@selector(valueForKey:) withObject:@"myURIAsString"];
    6. // diese category methode von NSArray gibt mir nur ein neues Array mit den Strings für die URI zurück
    7. [pboard setPropertyList:itemNames forType: myType];
    8. return YES;
    9. }
    Alles anzeigen
  • Interessanter Artikel. Hatte bisher noch keine Probleme mit dem setPropertyList, werde aber mal besser aufpassen. Wahrscheinlich ist bei mir alles gut gegangen, weil ich nicht NSURLs in das Array packe, sondern NSStrings von den URLs (weiß nicht mehr genau, warum ich das gemacht habe...)

    Eine Frage: wie schreibst Du denn ein NSArray in's Pasteboard, ohne setPropertyList zu nehmen? Ich habe in der Doku zu NSPasteboard nur setPropertyList, setData und setString gefunden.
  • Es sind nur wenig klassen pl-compliant. In der Tat sit der Königsweg die Umwandlungin ein Data-Objekt.

    @Objcler: Du hast ne schöne Applikation geschrieben. Nur eine Sache gefiel mir nicht. Wenn du das Sheet zum lernen öffnest, benutzt du zur Auswahl den gleichen Array-Controller wie im Hauptfenster. Es ist etwas überraschend, hier eine Synchronität festzustellen. Das solltest du ändern.
    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"?