核心数据:executeFetchRequest:error:返回没有managedObjectContext的对象

时间:2013-01-02 19:54:05

标签: ios core-data nsmanagedobjectcontext

我遇到的问题是NSManagedObjectContext的{​​{1}}正在返回尚未在上下文中插入的executeFetchRequest:error:数组。

我的方法:

NSManagedObjects

我已经确认总是在主线程上创建- (NSArray *)deleteAllObjectsWithEntityName:(NSString *)entityName { NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entityDesc = [NSEntityDescription entityForName:entityName inManagedObjectContext:self.managedObjectContext]; fetchRequest.entity = entityDesc; NSError *error = nil; NSArray *managedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error]; // [[self.managedObjectContext registeredObjects] count] : 0 // [[self.managedObjectContext insertedObjects] count] : 0 // // managedObjects.count : 1 // error : nil // // managedObjects[0] : <Foo: 0xe98c1d0> // managedObjects[0].isDeleted : NO // managedObjects[0].isFault : NO // managedObjects[0].isInserted : NO // managedObjects[0].managedObjectContext : nil // // [NSThread isMainThread] : YES // // self.managedObjectContext : <NSManagedObjectContext: 0xe97d840> // for (NSManagedObject *anObject in managedObjects) { [self.managedObjectContext deleteObject:managedObject]; } [self.managedObjectContext save:&error]; // error : Error Domain=NSCocoaErrorDomain Code=134030 \ // "The operation couldn’t be completed. (Cocoa error 134030.)" UserInfo=0x8b6d260 \ // {NSAffectedObjectsErrorKey=( // "<Foo: 0x10464910> (entity: Foo; id: 0x10464950 <x-coredata:///Job/tE5188F9B-9DC4-4EA2-8636-7790587E114F242> ; data: {...})" // ), \ // NSUnderlyingException=Cannot update object that was never inserted.}, }

根据NSManagedObjectContext Class Reference,对象会自动在提取的managedObjectContext中注册,因此我发现self.managedObjectContext返回一个空集是可疑的。

我很难过,所以我希望有人可以发现我的代码有问题,或者知道我错过了一些问题。

1 个答案:

答案 0 :(得分:2)

这是在删除托管对象并保存其上下文后更新托管对象的症状。

我在视图控制器中保留了对Foo实例的引用。我从托管对象上下文中删除了所有Foo对象,然后更新了Foo实例,然后再次尝试删除所有Foo对象。

这个问题帮助我追查原因:How can I tell whether an `NSManagedObject` has been deleted?