以下代码不会删除该实体。控制台上出现“删除成功”消息,因此找到了实体。我使用的所有其他操作都成功了。
我正在使用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 :(得分:5)
我找到了这个解决方案:
实际上,您必须从persistentstore获取数据,而不是当前创建的托管上下文:
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];
答案 1 :(得分:2)
我正在做同样的事情并且几乎完全相同的代码。 在我的代码中,我也完成了删除并保存....
但是,当我检查数据库时,它没有被删除。
问题不在于模拟器... SURE 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? 。如果你找到解决方案请在这里分享
答案 2 :(得分:2)
@Sumitiscreative我今天遇到了同样的问题。如果发现通常使用您必须使用的核心数据
[NSManagedObject save:]
用于存储更改。我挖了一下Restkit,发现了这个
[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext deleteObject:(NSManagedObject *)];
[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext saveToPersistantStore:(NSError *)];
在上述删除方法之后调用此方法正在将对象从数据库中删除。
**编辑 - 我也只是把它作为评论,但我没有选项
答案 3 :(得分:1)
@Lance 嘿,请用最新版本更新你的restkit。 现在,如果您的服务器相关配置正确,这可以在最新版本中使用。如果您从服务器获取删除请求的成功代码。然后,restkit会自动删除数据。
如果您需要从外部删除任何数据,可以使用persistentStoreManagedObjectContext,删除后保存。
此外,如果您想在最后检查是否通过restkit正确删除。你能做的就是......
成功后发出删除请求 如果项目存在,请使用相同的ID检查。 (只是为了帮助)