2013-02-26 118 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,如果项目存在。 (仅用于帮助)