【发布时间】:2012-07-16 20:25:15
【问题描述】:
我使用 RESTKit 已经有一段时间了,它更容易加载 json 并将它们保存在数据库中。但是,我有时一直在谷歌上搜索,找不到解决这个问题的方法。
我设置了一个托管对象模型,使得三个不同的实体彼此之间具有直接的一对一关系。我的模型的布局是;
如果我在Friend类上加载对象,它也会根据Friend模型中的映射关系映射到其余两个模型。
假设用户连接了他的 facebook 帐户并链接了帐户,那么很明显 json 响应将包含linkedin 和朋友模型的映射。在这种情况下,json 响应将是;
[
{
"name":"foo bar",
"id":307,
"facebook":{
"name":"foo bar",
"username":"foo.bar.5074",
"id":"1000013421379389",
"picture":"https://fbcdn-profile-a.akamaihd.net/foo-bar.jpg"
},
"linkedin":{
"name":"foo bar",
"headline":"some headline",
"id":"1000013",
"link":"http://www.linkedin.com/foo.bar",
"image":"https://linkedin.com/foo-bar.jpg"
},
"picture":"https://fbcdn-profile-a.akamaihd.net/foo-bar.jpg"
},
{
...
}
]
但是,一旦用户链接了 Facebook 和 Linkedin,他也可以通过网站取消链接。因此,如果用户取消链接,则 json 响应将不会具有与通常相同的映射,并且可能不会在 json 响应中包含 facebook 对象或 linkedin 对象,因此响应看起来像,
[
{
"name":"foo bar",
"id":307,
"facebook":{
"name":"foo bar",
"username":"foo.bar.5074",
"id":"1000013421379389",
"picture":"https://fbcdn-profile-a.akamaihd.net/foo-bar.jpg"
},
"picture":"https://fbcdn-profile-a.akamaihd.net/foo-bar.jpg"
},
{
...
}
]
如果出现这样的响应,我想为用户删除现有的链接记录。或者可能是如果响应没有 facebook 或两者都没有我想删除本地记录和模型的关联,以响应中为空者为准。
我希望 RESTKit 自动删除关联的对象。我想通过在对象加载器中指定获取请求可以通过 Restkit,但我不太确定。我正在使用加载器模式来加载对象,所以我将在哪里指定获取请求,
已编辑
RKObjectMappingProvider *provider = [RKObjectMappingProvider mappingProvider];
[provider setObjectMapping:[self objectMappingForFriend] forKeyPath:@""];
[provider setObjectMapping:[self objectMappingForFriend] forResourcePathPattern:resourcePath withFetchRequestBlock:^NSFetchRequest *(NSString *resourcePath) {
return [Friend fetchRequest];
}];
[[[RKObjectManager sharedManager] loadObjectsAtResourcePath:resourcePath usingBlock:^(RKObjectLoader *loader){
loader.mappingProvider = provider;
loader.delegate = self;
loader.method = RKRequestMethodGET;
}];
_我想我这里有多余的代码。 _
有了这个,我希望在响应为空时删除本地存储中的所有对象。但是,它对我不起作用。我不知道我应该如何解决这个问题。
更新时间:当地时间 2012 年 7 月 8 日下午 2:23
self.objectManager = [RKObjectManager objectManagerWithBaseURL:[NSURL URLWithString: @"https://mywebsite"]];
self.objectManager.client.disableCertificateValidation = YES;
self.objectManager.client.cachePolicy = RKRequestCachePolicyLoadIfOffline | RKRequestCachePolicyLoadOnError | RKRequestCachePolicyTimeout | RKRequestCachePolicyEtag;
self.objectManager.requestCache.storagePolicy = RKRequestCacheStoragePolicyPermanently;
self.objectManager.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES;
self.objectManager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:@"test.sqlite" ];
self.objectManager.objectStore.cacheStrategy = [RKInMemoryManagedObjectCache new];
现在,设置映射广告加载数据,
RKObjectMappingProvider *provider = [RKObjectMappingProvider mappingProvider];
[provider setObjectMapping:[self objectMappingForFriend] forKeyPath:@""];
[provider setObjectMapping:[self objectMappingForFriend] forResourcePathPattern:resourcePath withFetchRequestBlock:^NSFetchRequest *(NSString *resourcePath) {
return [Friend fetchRequest];
}];
[[[RKObjectManager sharedManager] loadObjectsAtResourcePath:resourcePath usingBlock:^(RKObjectLoader *loader){
loader.mappingProvider = provider;
loader.delegate = self;
loader.method = RKRequestMethodGET;
}];
更新时间:当地时间 2012 年 7 月 8 日下午 4:11
似乎它正在删除一些无效的一些本地对象,但只有一些对象有引用,即使有空的 json 响应,主模型 Friend 仍然存在。
【问题讨论】:
标签: objective-c ios core-data restkit