Cocoa 如何从CoreData实体获取一些值以进行编码

Cocoa 如何从CoreData实体获取一些值以进行编码,cocoa,core-data,key-value-observing,nsarraycontroller,Cocoa,Core Data,Key Value Observing,Nsarraycontroller,我在CoreData应用程序中创建了一个具有某些属性的实体。想象一个tableview和一个绑定的NSArrayController。我用这两种方法创建(和编辑)我的实体“实例”。我的问题是如何将这些属性的值添加到代码中。如果还有其他问题:如果我的回答正确,您有一个TableView,绑定到绑定到数据的NSArrayController 简单的方法是:在类(通常是文件的所有者)中创建一个IBOutlet,然后在Interface Builder中将该IBOutlet连接到NSArrayContr

我在CoreData应用程序中创建了一个具有某些属性的实体。想象一个tableview和一个绑定的NSArrayController。我用这两种方法创建(和编辑)我的实体“实例”。我的问题是如何将这些属性的值添加到代码中。如果还有其他问题:

如果我的回答正确,您有一个TableView,绑定到绑定到数据的NSArrayController


简单的方法是:在类(通常是文件的所有者)中创建一个IBOutlet,然后在Interface Builder中将该IBOutlet连接到NSArrayController。然后,您可以从该数组中获取所需的值。

如果我的回答正确,您就有一个表视图,绑定到绑定到数据的NSArrayController


简单的方法是:在类(通常是文件的所有者)中创建一个IBOutlet,然后在Interface Builder中将该IBOutlet连接到NSArrayController。然后,您可以从该数组中获取所需的值。

您需要以某种方式获取对NSArrayController的引用。如果您自己加载NIB,则可以向设置为NIB“文件所有者”的类添加一个IBOutlet实例。加载nib时,提供nib的“文件所有者”类的实例作为所有者。如果您自己没有加载NIB(即,Cocoa会自动将其加载为应用程序的mainemu NIB/xib),则在NIB中创建您自己类的实例,并向该实例添加IBOutlet。在类中创建一个IBOutlet,如下所示:

@interface MyClass : NSObject { //of course your class doesn't have to be a direct descendent of NSObject
    IBOutlet NSArrayController *arrayController;
}

@property (retain,nonatomic,readwrite) IBOutlet NSArrayController *arrayController;

...

@end

@implementation
@synthesize arrayController;

- (void)dealloc {
    [arrayController release];
    [super dealloc];
}
@end
将类中的IBOutlet连接到NSArrayController(第一种情况下controll单击文件所有者,第二种情况下单击类的实例),然后拖动到NSArrayController。释放鼠标时,将在拖动源中弹出IBOutlets。选择您创建的IBOutlet(例如上面示例中的“arrayController”)

加载nib后(即在类中调用
awakeFromNib
后),您可以通过出口访问arrayController:

NSArray *content = [[self arrayController] arrangedObjects];

现在,您可以使用数组中的值执行任何操作。

您需要以某种方式获得对NSArrayController的引用。如果您自己加载NIB,则可以向设置为NIB“文件所有者”的类添加一个IBOutlet实例。加载nib时,提供nib的“文件所有者”类的实例作为所有者。如果您自己没有加载NIB(即,Cocoa会自动将其加载为应用程序的mainemu NIB/xib),则在NIB中创建您自己类的实例,并向该实例添加IBOutlet。在类中创建一个IBOutlet,如下所示:

@interface MyClass : NSObject { //of course your class doesn't have to be a direct descendent of NSObject
    IBOutlet NSArrayController *arrayController;
}

@property (retain,nonatomic,readwrite) IBOutlet NSArrayController *arrayController;

...

@end

@implementation
@synthesize arrayController;

- (void)dealloc {
    [arrayController release];
    [super dealloc];
}
@end
将类中的IBOutlet连接到NSArrayController(第一种情况下controll单击文件所有者,第二种情况下单击类的实例),然后拖动到NSArrayController。释放鼠标时,将在拖动源中弹出IBOutlets。选择您创建的IBOutlet(例如上面示例中的“arrayController”)

加载nib后(即在类中调用
awakeFromNib
后),您可以通过出口访问arrayController:

NSArray *content = [[self arrayController] arrangedObjects];

现在,您可以使用数组中的值执行任何操作。

如果您自己不加载nib,那么您不需要@property和@synthesis是否正确?nib加载代码将直接连接实例变量,但根据mmalc的说法,使用上面显示的模式是唯一保证在GC和非GC环境中正确处理内存管理的模式。如果您自己不加载nib,那么说您不需要@property和@synthesis是否正确?nib加载代码将直接连接实例变量,但是根据mmalc,使用上面显示的模式是唯一保证在GC和非GC环境中正确处理内存管理的模式。