我有一些代码需要访问 NSArray 才能工作。我有一个 NSArray,我正在将其与 Core Data 一起使用,并且其中会有数据,但我不确定如何使我的 NSArrayController 访问 NSArray。

我不能简单地在头文件中声明它,如下所示: NSArray *objectArray; 因为它不知道如何或哪个 NSArray 访问。我究竟如何访问正在使用 Core Data 的 NSArray?

我的头文件:

#import <Cocoa/Cocoa.h>


@interface MyOutlineView : NSOutlineView {
    NSArrayController* objectArray;
}

@end

我的实施文件:

#import "MyOutlineView.h"

@implementation MyOutlineView

- (void) outlineView: (NSOutlineView *) aView
     willDisplayCell: (id) aCell
      forTableColumn: (NSTableColumn *)aColumn
                item: (id) anItem
{
    id rootObj = anItem;
    unsigned row = [aView rowForItem:anItem];

    [aCell setDrawsBackground: YES];

    while ([aView levelForRow:row] != 0) {
        row --;
        rootObj = [aView itemAtRow:row];
    }

    // The colours here are foul and ugly.  Use something else, for
    // God's sake!
    if( [objectArray indexOfObject:rootObj] % 2 )
        [aCell setBackgroundColor: [NSColor yellowColor]];
    else
        [aCell setBackgroundColor: [NSColor blueColor]];
}

@end
有帮助吗?

解决方案

我制作了一个测试应用程序,其中 IBOutlet 从 Xib 连接到 NSArrayController。在这个测试中我有:

  • 从Core Data应用模板开始;
  • 在数据模型中创建具有两个属性(字符串、整数)的实体;

在锡布:

  • 具有托管对象上下文的数组控制器,连接到 Test_AppDelegate.managedObjectContext;
  • TableView 的 cols 连接到数组控制器的排列对象的第一个和第二个属性;
  • 添加和删​​除按钮,连接到阵列控制器的添加:并删除:行动;
  • “显示计数”按钮和标签;-

在代码中(Test_AppDelegate.*):

  • IBOutlet NSArrayController *ac;(在 Xib 中从 Test_AppDelegate.ac 连接到数组控制器);
  • IBOutlet NSTextField *nLabel;(在 Xib 中连接到 Label);
  • (IBAction)showNum:(id)发送者;(通过“显示计数”按钮连接);
  • 实际代码 showNum:[nLabel setIntValue:[[ac排列对象]计数]];

我能够:

  • 添加/删除对象到表视图和受控数组;
  • 从代码中访问 NSArrayController 以获取arrangedObjects 数组。

因此,将 IBOutlet 从代码绑定到 Xib 的数组控制器并访问其排列对象应该可以工作。

其他提示

我可能没有得到这个 - 但是你不能只创建一个initWithArray方法吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top