3

RestKitは初めてです。SpaceとUserのエンティティ間の多対多の関係をマッピングしようとしています。この質問の目的のために、すべてのSpaceオブジェクトがすでにCoreDataストアに正しくあると想定します。

REST APIでは、1回の呼び出しで、特定のスペースのすべてのユーザーを取得できます。まず、ネットワークフェッチクラスを初期化するときに、ユーザーのリストを解析するのに適したマッピングを設定します。

RKManagedObjectMapping *teamMapping = [RKManagedObjectMapping mappingForEntity:[NSEntityDescription entityForName:@"User" inManagedObjectContext:self.manager.objectStore.primaryManagedObjectContext] inManagedObjectStore:self.manager.objectStore];

[teamMapping mapKeyPath:@"id" toAttribute:@"userID"];
[teamMapping mapKeyPath:@"name" toAttribute:@"name"];
teamMapping.primaryKeyAttribute = @"userID";
[self.manager.mappingProvider setMapping:teamMapping forKeyPath:@"users.user"];

次に、ユーザーのスペースへのリンクを設定するために、次のようにします。

NSArray *spaces = [self.managedObjectContext executeFetchRequest:[NSFetchRequest fetchRequestWithEntityName:@"Space"] error:nil];

for (QBSpace *space in spaces)
{
    [self.manager loadObjectsAtResourcePath:[NSString stringWithFormat:@"space/%@/users", space.wikiName] usingBlock:^(RKObjectLoader *loader) {
        loader.onDidLoadObjects = ^(NSArray *objects){
            space.team = nil;
            for (QBUser *user in objects)
            {
                [space addTeamObject:user];
            }

        };
    }];
}

つまり、返されたオブジェクトの配列に基づいて、スペース->ユーザーリンクを手動で追加します。

それは正しい方法ですか?正常に動作しているように見えますが、RestKitが自動的に処理を実行するためのトリックが欠落しているのではないかと心配しています。

問題のファイルに対して返されるXMLは次のようになります。

<users type="array">
<user>
<id>aPrimaryKey</id>
<login>loginName</login>
<login_name warning="deprecated">loginName</login_name>
<name>Real Name</name>
</user>

したがって、返されたファイルには、リンクしようとしているスペースを示すものは何もありません。要求したURLにそれを渡しましたが、返されたドキュメントには何もありません。そのため、このブロックを思いつきました。ベースのソリューション。

すべてのRestKitユーザーにとって、これは多対多のリンクを形成するための許容できる方法のように見えますか?

4

1 に答える 1

1

それがうまくいけば、大丈夫ですか?

SpaceのカスタムManagedObjectを使用することを検討できます。に応答してもらいRKObjectLoaderDelegateます。

次に、応答を受け取ったときに、または メソッドloadAtResourcePath内からを トリガーできます。objectLoader:didLoadObject:(id)objectobjectLoader:didLoadObjectDictionary:

SpaceクラスをUserからのデリゲートに応答させ、その時点でそれらをスペースに結び付けることもできますか?

それは良いかもしれませんが、それはあなたが達成しようとしていることに依存します。とにかく思考の糧。:)

于 2012-05-08T14:23:54.430 に答える