繁体   English   中英

无法使用RestKit 0.20从Core Data中删除实体

[英]Can not delete an entity from Core Data, using 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);

    }
}

为什么删除操作不成功以及使其工作的解决方案是什么。

我发现这个解决方案:

实际上,您必须从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];

我正在做同样的事情,并有几乎相同的代码。 在我的代码中,我删除完成并保存....

但是,当我检查数据库时,它没有被删除。

问题不在于模拟器... SURE bcz我也在设备上遇到同样的问题。 有一个叫做子上下文的东西,它可能是原因......检查这些链接http://restkit.org/api/0.20.0-dev/Classes/RKManagedObjectRequestOperation.html#//api/name/managedObjectContext RestKit 0.20 -创建新NSManagedObject的首选方法是什么? 如果你找到解决方案请在这里分享

@Sumitiscreative我今天遇到了同样的问题。 如果发现通常使用您必须使用的核心数据

[NSManagedObject save:] 

用于存储更改。 我挖了一下Restkit,发现了这一点

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

在上述删除方法之后调用此方法正在将对象从数据库中删除。

**编辑 - 我也只是发表评论,但我没有选择

@Lance Hey,请用最新版本更新你的restkit。 现在,如果您的服务器相关配置正确,这可以在最新版本中使用。 如果您从服务器获取删除请求的成功代码。 然后,restkit会自动删除数据。

如果需要在外部删除任何数据,则可以使用persistentStoreManagedObjectContext,删除后保存。

此外,如果您想在最后检查是否通过restkit正确删除。 你能做的是......

如果项目存在,则在成功检查后使用相同的ID进行删除请求。 (只是为了帮助)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM