假设我有一个使用AFIncrementalStore
的核心数据模型,并且我有多个REST API端点用于检索该模型的对象列表。我可以覆盖AFHTTPClient
中的-requestForFetchRequest:withContext:
,如下所示:
- (NSURLRequest *)requestForFetchRequest:(NSFetchRequest *)fetchRequest
withContext:(NSManagedObjectContext *)context {
NSMutableURLRequest *mutableURLRequest = nil;
if ([fetchRequest.entityName isEqualToString:@"Post"]) {
mutableURLRequest = [self requestWithMethod:@"GET" path:@"/posts/foo" parameters:nil];
}
return mutableURLRequest;
}
在这个片段中,我在/posts/foo
检索Post
对象,但我还需要从/posts/bar
检索另一个集合。
我该怎么做?我看到的唯一解决方案是制作两个模型:一个用于foo
,另一个用于bar
,但重复自己是站不住脚的,而且可能还有更多的API端点为我获取我需要支持的Post
对象。我还缺少其他方法吗?
您需要更仔细地检查fetchRequest
,而不仅仅是查看entityName
。根据您的数据模型,您还可以查看fetchRequest.propertiesToFetch
或可能的其他内容。您仍然需要发送两个请求,所以只需确保您的AFNetworking子类能够区分。
另外:听起来你的requestForFetchRequest:withContext:
方法可能会变得非常大。您可能需要考虑一种更通用的模式,在这种模式中,您可以获得NSManagedObject
子类,并要求它返回一个获取请求。