如何在Cocoa中使用Bindings + CoreData实现iTunes风格的Source-List?

jbr*_*nan 7 cocoa core-data cocoa-bindings

让我们说,为了说明,我在Cocoa中编写了一个iTunes克隆应用程序,该应用程序由CoreData支持.为简化起见,假设有两个"部分","图书馆",包括音乐,电影,广播等.第二部分称为"播放列表",其中包含用户生成的播放列表(只是哑列表,而不是智能播放列表) .

因此SourceList本身通常会实现NSOutlineView,这通常是直截了当的.

源列表的"库"部分并不真正包含用户生成的任何内容,只包含应用程序的"功能"(实质上),其中"播放列表"部分仅包含用户创建的自定义列表.如何用Bindings和CoreData做到这一点?是否可以将播放列表部分绑定到用户的数据并具有显示库功能的自定义方式?

我一般都会使用Bindings和AppKit弄湿我的脚,所以请耐心等待.我很感激帮助.我应该补充一点,我的目标是10.6及以上.

e.J*_*mes 6

我没有很多核心数据的经验,但我已经广泛使用了Cocoa的绑定.根据我的经验,这样的东西最适合用于NSArray"手动"调整的物体中间物.

作为一个例子,我想你会有一个NSArray用户生成的播放列表自定义,你也可以单独NSArray包含你的标准库项目.使用此设置,我将在您调用的一个控制器中创建一个属性,combinedArray该属性将绑定到您的控制器NSOutlineView.然后,我将用户生成的播放列表数组绑定到控制器,并且每当修改播放列表数组时,控制器中的一些代码会自动更新组合数组.

这是一个快速模型:

TheController.h

@interface TheController : NSObject
{
    NSArray * combinedArray;
    NSArray * userPlaylists;
}
@property (retain) NSArray * combinedArray;
@property (copy) NSArray * userPlaylists;
@end
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)