2

我正在尝试managedObjectContextAppDelegatemac 平台(不是 iOS)上获取一些 CoreData 操作。正如 SO 上的许多答案已经指出的那样(尽管主要针对 iOS),有几个选项,例如创建一个单例来访问 managedObjectContext 或向managedObjectContext我想要访问它的每个控制器添加一个属性。
我已经完成了后者,但是每次尝试基于某个实体创建 managedObject 时,都会出现以下错误:+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;

该控制器的初始化方法以获取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];
   }

任何想法为什么这不起作用?

谢谢!

4

1 回答 1

1

首先:您的财产没有属性。AFAIK,“原子”是默认设置,这对大多数对象都不利。

第二:如果你总是从 app-delegate 获得 MOC,为什么要把它分配给一个属性?在您的 addItem 方法中,只需从委托而不是属性中获取您的 MOC。

第三:如果从委托中获取 MOC 仍然导致零错误,您显然需要检查委托中的方法。

(最初将此作为评论发布,但由于评论不允许段落格式,我将其重新发布为答案)

于 2013-07-24T11:45:28.570 回答