2013-01-02 92 views
2

我遇到了一個問題,NSManagedObjectContextexecuteFetchRequest: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返回一個空集是可疑的。

我很難過,所以希望有人能發現我的代碼有問題,或者知道我錯過了一些問題。

+0

你是什麼意思沒有被插入上下文中? – Levi

+0

我的意思是這些對象都有一個零的managedObjectContext。 – ryanipete

+0

我不確定它是否會有所幫助,但是在插入有問題的對象並在運行上面的代碼之前,我會嘗試在託管對象上下文中調用processPendingChanges。也許只是把它作爲上面方法的第一行。 –

回答

2

這是被管理對象刪除並保存其上下文後更新管理對象的一種症狀。

我一直在視圖控制器中引用Foo實例。我從託管對象上下文中刪除了所有Foo對象,然後更新了Foo實例,然後嘗試再次刪除所有Foo對象。

此問題已幫助我追查原因:How can I tell whether an `NSManagedObject` has been deleted?

相關問題