7

下面的代码不会删除实体。控制台上会显示“删除成功”消息,以便找到实体。我使用的所有其他操作都成功。

我正在使用 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);

    }
}

为什么此删除操作可能不成功,以及使它工作的解决方案是什么。

4

4 回答 4

5

我找到了这个解决方案:

实际上,您必须从持久存储中获取数据,而不是从当前创建的托管上下文中获取数据:

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];
于 2013-03-14T08:42:12.713 回答
2

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

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

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

于 2013-03-12T11:36:00.780 回答
2

@Sumitiscreative 我今天遇到了同样的问题。如果发现通常使用 Core Data 你必须使用

[NSManagedObject save:] 

让它存储更改。我通过 Restkit 挖掘了一下,发现了这个

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

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

**编辑 - 我也会对此发表评论,但我没有选择

于 2013-07-03T19:40:47.220 回答
1

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

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

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

如果项目存在,则在成功检查相同的 id 后发出删除请求。(只是为了帮助)

于 2013-07-08T08:07:20.623 回答