小编apu*_*rva的帖子

RestKit + CoreData:只有在远程保存成功后才能在本地保存对象?

我在iOS 5.0部署目标上使用带有Core Data的RestKit 0.10.1来构建与自定义RESTFul API接口的应用程序.由于离线连接很重要,因此我在设备的本地CoreData数据库中维护用户数据的缓存.

现在,RestKit非常棒,设置RKFetchResultsTableController以轻松显示和保存我的数据已经相当轻松了.但是,RestKit有一种行为似乎并不理想,我无法弄清楚如何改变.

我有一个名为'录音'的模型.要创建新录制,我正在执行以下操作:

 Recording *r = [NSEntityDescription insertNewObjectForEntityForName:@"Recording" inManagedObjectContext:[[RKObjectManager sharedManager].objectStore managedObjectContextForCurrentThread]];

 r.name = newName; 

[[RKObjectManager sharedManager] sendObject:r toResourcePath:@"/recordings" usingBlock:^(RKObjectLoader *loader){
        loader.delegate = self; 
        loader.method = RKRequestMethodPOST;
        loader.serializationMIMEType = RKMIMETypeJSON;  

        loader.serializationMapping = [RKObjectMapping serializationMappingUsingBlock:^(RKObjectMapping *serializationMapping){
            [serializationMapping mapAttributes:@"name", nil];

        }];

        RBMappingProvider *mappings = (RBMappingProvider *)[[RKObjectManager sharedManager] mappingProvider];
        loader.objectMapping = [mappings recordingObjectMapping];

    }];
Run Code Online (Sandbox Code Playgroud)

这将创建一个类型为"Recording"的新实体,然后在POST请求中将实体发送到服务器.在成功案例中,这很有效.

但是,问题是服务器有时会合法地拒绝这些创建.我在这些情况下发现的是,核心数据数据库中已存在实体的本地副本,其id为0(id是服务器设置的主键).

删除本地实体的唯一方法是强制从服务器刷新本地数据.

有没有办法只在服务器响应2xx时本地持久保存对象?或者,有没有办法撤消更改,如果服务器响应除了2xx之外的任何东西?

谢谢,

core-data ios restkit

5
推荐指数
1
解决办法
2072
查看次数

标签 统计

core-data ×1

ios ×1

restkit ×1