2

私はAFIncrementalStoreを使用してiOSアプリケーションをRESTAPIに接続しています。Events最初のViewControllerをロードするときに、最新の100 (NSManagedObjects)をビューにロードするNSFetchRequestを作成します。問題は、それぞれEventがオブジェクトと1:1の関係にありGroup、が読み込まれるとすぐにEvent、インクリメンタルストアがそのオブジェクトを埋めるように求められることですGroup。これにより、私の場合、100ごとにサーバーへの個別のリクエストがトリガーされますEvents

この問題を解決する方法はいくつかあります。たとえばGroups、サーバーが既にローカルに保存されている場合はサーバーから要求しない、ネットワーク要求をキャッシュする、NSManagedObjectに関係を保存しないなどです。しかし、理想的には、Groupオブジェクトは障害として開始し、1対多の関係で発生するのと同様に、フィールドの1つにアクセスしたときにのみ入力を要求できます。残念ながら、コアデータの1対1の関係を遅延ロードする方法を説明しているドキュメントは見つかりません。出来ますか?

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 に答える