将Core Data设置为延迟加载为一个关系

时间:2012-12-15 16:22:19

标签: core-data afnetworking afincrementalstore

我正在使用AFIncrementalStore将我的iOS应用程序连接到我的REST API。当我加载我的初始视图控制器时,我创建了一个NSFetchRequest,它将最新的100 Events(NSManagedObjects)加载到视图中。问题是每个EventGroup对象的关系为1:1,加载Event后,会要求增量存储填充Group } object,在我的情况下,为100 Events中的每一个触发对服务器的单独请求。

我可以看到几种解决此问题的方法,例如,如果已经在本地保存,则不从服务器请求Groups,缓存网络请求,或者不将关系存储在NSManagedObject中。但理想情况下,Group对象可以作为一个错误开始,并且只有在访问其一个字段时才请求填充,类似于一对多关系中发生的情况。不幸的是,我找不到任何文档说明如何强制核心数据中的一对一关系延迟加载。有可能吗?

2 个答案:

答案 0 :(得分:1)

也许这就是你要找的东西?

来自AFIncrementalStore.h:

/**
Returns whether the client should fetch remote relationship values for a
particular managed object. This method is consulted when a managed object
faults on a particular relationship, and will call
`-requestWithMethod:pathForRelationship:forObjectWithID:withContext:` if `YES`.
@param relationship The relationship of the specifified managed object
@param objectID The object ID for the specified managed object.
@param context The managed object context for the managed object.
@return `YES` if an HTTP request should be made, otherwise `NO.  */

- (BOOL)shouldFetchRemoteValuesForRelationship:(NSRelationshipDescription*)
        relationship forObjectWithID:(NSManagedObjectID *)objectID
        inManagedObjectContext:(NSManagedObjectContext *)context;

如果是这样,您可以使用

进行设置
- (BOOL)shouldFetchRemoteValuesForRelationship:(NSRelationshipDescription *)relationship forObjectWithID:(NSManagedObjectID *)objectID inManagedObjectContext:(NSManagedObjectContext *)context
{
    return NO;
}

在您的AFRESTClient <AFIncrementalStoreHTTPClient>子类中。

答案 1 :(得分:0)

我也一直在努力。看起来像一对一的关系将始终是急切加载。解决这个问题的一种方法是将它声明为一对多关系,以便它自动执行延迟加载。然后在模型类中,您可以使用一个方法返回集合中的第一个。