2013-02-26 99 views
7

下面的代碼不會刪除實體。控制檯上顯示「刪除成功」消息,因此找到該實體。我使用的所有其他操作都成功。無法使用RestKit從核心數據中刪除實體0.20

我正在使用RestKit 0.20。

NSManagedObjectContext *context = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext; 
NSError *error = nil; 

NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setEntity: [NSEntityDescription entityForName:@"Auction" inManagedObjectContext:context]]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"AuctionID = %d", auctionID]; 
[fetchRequest setPredicate:predicate]; 

NSArray *result = [context executeFetchRequest:fetchRequest error:&error]; 
if(result.count) { 
    Auction *block = result[0]; 
    [context deleteObject:block]; 
    BOOL status = [context save:&error]; 
    if (status == NO) { 
     NSLog(@"delete falied for AuctionID:%d, error: %@", auctionID, error); 
    } 
    else { 
     [context processPendingChanges]; 
     NSLog(@"delete was successful for AuctionID:%d", auctionID); 

    } 
} 

爲什麼這個刪除操作不成功,以及使其工作的解決方案是什麼。

+0

刪除它後,你在哪裏看到實例? – 2013-02-26 19:22:00

+0

我在模擬器中的* .sqlite文件上使用第三方工具「Base」。我可以使用該工具刪除實體。 – zaph 2013-02-26 22:08:40

+0

我實際上在想,問題的症狀是什麼,以及什麼時候發生。你說你在刪除數據方面有問題,所以你什麼時候看到你認爲已經刪除的項目? – 2013-02-26 22:31:07

回答

5

解決方案請分享我發現這個解決方案:

事實上,你必須獲取從persistentstore DATAS而不是當前創建管理方面:

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyModel"]; 
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"id" ascending:NO]; 
fetchRequest.sortDescriptors = @[descriptor]; 

// Setup fetched results 
NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                     managedObjectContext:[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext 
                      sectionNameKeyPath:nil 
                        cacheName:nil]; 

// AND TO DELETE A MODEL : 

[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext deleteObject:myobject]; 
+0

謝謝:)如果您找到更好的解決方案,請毫不猶豫地將其用於 – Sebastien 2013-03-15 14:43:00

+0

這確實可以解決問題。問題在於上下文,'[RKManagedObjectStore defaultStore] .persistentStoreManagedObjectContext'確實是一個修復。 – zaph 2013-03-18 18:49:47

2

我正在做同樣的事情,並有幾乎相同的代碼。 在我的代碼也,我刪除完成並保存....

但是,它不會刪除當我檢查數據庫。

問題是不是與模擬器...確保bcz我在設備上也得到同樣的問題。 有一種叫做子情境的東西,可能是原因...查看這些鏈接http://restkit.org/api/0.20.0-dev/Classes/RKManagedObjectRequestOperation.html#//api/name/managedObjectContext RestKit 0.20 — What is the preferred way to create a new NSManagedObject? 。如果您發現這裏

+0

同樣的錯誤,任何想法? – Sebastien 2013-03-12 22:59:44

+0

確保你們在停止應用程序後檢查數據庫。因爲更改不會被反映,除非它連接在一起。所以,刪除 - >斷開並檢查。在,我的情況下,它仍然沒有刪除後,像這樣檢查。是的,現在我可以明確地刪除它,但那是錯誤的,它應該只被restkit刪除。如果你們中的任何一個獲得解決方案,請在這裏發佈 – Sumitiscreative 2013-03-14 06:01:18

2

@Sumitiscreative我跑今天進入同樣的問題。如果發現通常使用核心數據,您必須使用

[NSManagedObject save:] 

它會存儲更改。我通過Restkit挖了一下,發現這個

[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext deleteObject:(NSManagedObject *)]; 
[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext saveToPersistantStore:(NSError *)]; 

調用此上述刪除方法,努力消除對象從DB之後。

**編輯 - 另外我想剛纔提出這個評論,但我沒有選擇

1

@Lance 嘿,請用最新版本的restkit。 與現在一樣,如果您的服務器相關配置正確,則可以使用最新版本。並且如果您從服務器獲取您的刪除請求的成功代碼。然後,restkit自動刪除數據。

如果你需要從外部刪除任何數據,那麼你可以使用persistentStoreManagedObjectContext,刪除後保存它。

此外,如果你想檢查你的最終是否正確刪除通過restkit或不。你可以做的是...

刪除請求,成功後 檢查具有相同的ID,如果項目存在。 (僅用於幫助)