-4

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

我不能像这样简单地在 Header 文件中声明它: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
4

2 回答 2

0

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

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

在西布:

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

在代码中(Test_AppDelegate.*):

  • IBOutlet NSArrayController *ac; (在 Xib 中从 Test_AppDelegate.ac 连接到阵列控制器);
  • IBOutlet NSTextField *nLabel; (在 Xib 中连接到标签);
  • (IBAction)showNum:(id)sender; (从“显示计数”按钮连接);
  • 实际代码 showNum: [nLabel setIntValue:[[ac mappedObjects] count]];

我能够:

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

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

于 2009-06-23T16:03:33.360 回答
0

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

于 2009-06-24T19:55:18.717 回答