将"核心数据"设置为延迟加载到"一"关系



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

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

也许这就是你要找的?

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

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

最新更新