Для C вы можете взглянуть на tcc , Tiny C Compiler. Запуск кода на C в качестве сценария является одним из его возможных применений.
I haven't had a lot of experience with core data, but I have made extensive use of Cocoa's bindings. In my experience, something like this works best with an intermediate NSArray
of objects which is "manually" adjusted.
As an example, I imagine you would have a custom NSArray
of playlists that are user-generated, and you would also have a separate NSArray
containing your standard Library items. With this setup, I would create a property in one of your controllers called combinedArray
, which would be the property that gets bound to your NSOutlineView
. I would then bind your user-generated playlist array to the controller, and have some code in the controller automatically update the combined array whenever the playlist array is modified.
Here is a quick mock-up:
TheController.h
@interface TheController : NSObject
{
NSArray * combinedArray;
NSArray * userPlaylists;
}
@property (retain) NSArray * combinedArray;
@property (copy) NSArray * userPlaylists;
@end
TheController.m
@implementation TheController
@synthesize combinedArray;
@synthesize userPlaylists;
- (void)setUserPlaylists:(NSArray *)newLists
{
// standard property setting code:
if (newLists != userPlaylists)
{
[userPlaylists release];
userPlaylists = [newLists copy];
}
// modify the combined array:
NSMutableArray * allItems = [NSMutableArray arrayWithCapacity:0];
[allItems addObjectsFromArray:standardLibrary];
[allItems addObjectsFromArray:userPlaylists];
[self setCombinedArray:allItems];
}
@end
Поскольку исходный список в этом случае на самом деле является "областью", а не простым списком, состоящим только из экземпляров некоторой сущности "LibraryItem", я думаю, что проще реализовать это "старомодным" "способ (т. е. протокол источника данных таблицы).
Это дает вам точный контроль над группированием, как и когда смешивать «статические» элементы (например, «Библиотека» и «Музыка», «Фильмы», «Списки воспроизведения») с элементами из вашего магазина (например, отдельные элементы списка воспроизведения. в разделе «Плейлисты»).
Также, на мой взгляд, немного проще справиться с перетаскиванием, что является ключевым при предотвращении перетаскивания элемента списка воспроизведения в вашу группу «Фильмы».