我遇到了一個問題,NSManagedObjectContext
的executeFetchRequest:error:
正在返回一個尚未插入上下文的NSManagedObjects
數組。核心數據:executeFetchRequest:錯誤:返回沒有managedObjectContext的對象
我的方法:
- (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.},
}
我驗證過self.managedObjectContext
總是在主線程上創建的。
根據NSManagedObjectContext Class Reference,該對象自動註冊獲取managedObjectContext,所以我覺得registeredObjects
返回一個空集是可疑的。
我很難過,所以希望有人能發現我的代碼有問題,或者知道我錯過了一些問題。
你是什麼意思沒有被插入上下文中? – Levi
我的意思是這些對象都有一個零的managedObjectContext。 – ryanipete
我不確定它是否會有所幫助,但是在插入有問題的對象並在運行上面的代碼之前,我會嘗試在託管對象上下文中調用processPendingChanges。也許只是把它作爲上面方法的第一行。 –