这里的问题是,您的访问和您的伊娃具有相同的名称。这就是underbar ivar convention的来源。在这里,你没有使用访问器来访问你的属性,你直接使用了支持变量,所以它不会被初始化。相反,确保你总是通过你的访问器方法,你不会有问题。因此,改写违规方法(和任何其他人使用managedContextObject
属性的东西,如下列:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated]; // it's good practice to call the super methods, even if you're fairly certain they do nothing
// Get a reference to the managed object context *through* the accessor
NSManagedObjectContext* context = [self managedObjectContext];
// From now on, we only use this reference in this method
NSFetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription* entity = [NSEntityDescription entityForName:@"Remind" inManagedObjectContext:context]; // <- use the local reference we got through the accessor
[request setEntity:entity];
NSError* error = nil;
NSArray* array = [context executeFetchRequest:request error:&error];
if(!array) {
// Do something with the error
NSLog(@"Error Fetching: %@", error);
}
[self setDesitnationsArray:[array mutableCopy]];
[destinationsTableView reloadData];
}
你可能想改变你的ivars的东西,你会不动心使用,或者将立即显然你还没有浏览访问器,比如_managedObjectContext
甚至_privateContext
,或者任何会在你习惯通过访问器访问属性之前就会遇到的问题,如果你不喜欢访问属性的Objective-C语法,可以使用点语法,但是您必须始终记住要经过self
,例如self.managedObjectContext
。我不喜欢这种方法,因为人们忘记它不是一个直接的属性访问,而是使用访问器,所以他们认为可以直接访问的点语法交换,当它不是时(比如你的情况)。
您的托管对象上下文为零。我认为这是一个伊娃...它没有被设置任何东西。 –
感谢您的回复。你能告诉我如何解决这个问题吗? – Zack
不幸的是,或者我会把它放在答案中。您需要添加更多代码,这里没有足够的信息。在你的视图控制器中你在哪里设置managedObjectContext ivar? –