如何将 NSArray 和 NSArrayController 与 Core Data 一起使用?
-
06-07-2019 - |
题
我有一些代码需要访问 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方法吗?
不隶属于 StackOverflow