我正在尝试从mac平台(而不是iOS)上的 managedObjectContext
获取AppDelegate
来执行一些CoreData操作。由于SO上已经指出了许多答案(尽管主要针对iOS),但有一些选项可以创建单例来访问managedObjectContext或向我想要访问它的每个控制器添加managedObjectContext
属性。<登记/>
我已经完成了后者,但每当我尝试基于某个实体创建一个托管对象时,我都会收到以下错误:+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity
这是我到目前为止所做的事情:
ViewController.h:
@interface HitpointsTableViewConroller : NSObject <NSTableViewDataSource> {
IBOutlet NSTableView *tableView;
NSMutableArray *list;
}
@property NSManagedObjectContext *managedObjectContext;
该控制器的Init方法获取managedObjectContext
- (id)init {
if (self = [super init]) {
// get the managedObjectContext
NSManagedObjectContext *currentContext = [[NSApp delegate]managedObjectContext];
self.managedObjectContext = currentContext;
hitpointsList = [[NSMutableArray alloc]init];
}
return self;
}
我创建NSManagedObject的新实例的方法:
- (IBAction)addItem:(id)sender {
// create new item
Item *item = (Item *)[NSEntityDescription
insertNewObjectForEntityForName:@"Item"
inManagedObjectContext:[self managedObjectContext]];
// set defaults for that item
[item setName:@"Coffee"];
[item setPrice:2.99];
// add hitpoint to list
[list addObject:item];
}
为什么这不起作用?
谢谢!
答案 0 :(得分:1)
首先:你的财产没有属性。 AFAIK,“atomic”是默认值,对大多数对象来说都是坏事。
第二:如果你总是从app-delegate获得MOC,为什么要将它分配给一个属性?在你的addItem方法中,只需从代理而不是属性中获取你的MOC。
第三:如果从委托中获取MOC仍然会导致nil-error,那么显然需要检查委托中的方法。
(最初将此作为评论发布,但由于评论不允许段落格式化,我将其重新发布为答案)