2

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

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

4

2 回答 2

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>子类中。

于 2013-03-05T16:01:00.387 回答
0

我也一直在为此苦苦挣扎。看起来一对一的关系总是会被急切地加载。解决此问题的一种方法是将其声明为一对多关系,以便它自动执行延迟加载。然后在你的模型类中,你可以有一个方法返回集合中的第一个。

于 2013-08-02T17:19:32.497 回答