2012-12-15 26 views
2

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

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

+0

我也遇到过这个问题。我现在通过做一对多来解决它,知道那里只有一个对象。虽然这感觉很骇人听闻。我认为MAYBE'提取属性'将是答案,因为它们基本上是导致取回的属性,这在这种情况下似乎是有意义的。但是,我无法弄清楚如何访问我的requestForFetchRequest:withContext中的谓词信息。不仅如此,而且看起来像获取的属性是Arrays ANYWAY(一对多?)。猜猜我是CoreData新手。我啾啾@mattt这个链接虽然... – pj4533

回答

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>

设置此。

0

我一直在努力。看起来像一对一的关系总是被急切加载。解决这个问题的方法之一可能是将其声明为一对多关系,以便自动执行延迟加载。然后在你的模型类中,你可以有一个返回集合中第一个的方法。