2

このようなRESTサービスメソッドがあります

/GetOfficeDocument?officeId=259

ドキュメントの配列を返します。アプリ内のドキュメントは、オフィスと関係のある NSManagedObject オブジェクトです。officeIdparam をofficemy の関係にマップするにはどうすればよいDocumentですか?

をオーバーライドする必要objectLoader:willMapData:があることはわかっていますが、このメソッド内で正確に何をすべきかわかりません。ドキュメントは役に立たない。

アップデート。サーバーの応答は次のようになります。

[{"AddedDate":"\/Date(1261484400000+0400)\/","Title":"Some text","Uri":"\/Document\/News\/851"}]

ご覧のとおりofficeId、応答には含まれず、URL にのみ含まれます。objectLoader:willMapData:を使用して抽出できます

[[[loader URL] queryParameters] objectForKey:@"officeId"]

でも次はどこに置こうかな?マッピング可能なデータ パラメータは変更可能な配列ですが、そこには何を配置すればよいですか? わかりません。

4

2 に答える 2

1

You could try to inject the OfficeId value in each document item returned in the response like so:

- (void)objectLoader:(RKObjectLoader *)loader willMapData:(inout __autoreleasing id *)mappableData
{
    NSString *officeId = [[[loader URL] queryParameters] objectForKey:@"officeId"];

    NSMutableArray *newMappableData = [[NSMutableArray alloc] initWithCapacity:[*mappableData count]];

    for (NSDictionary *documentDict in *mappableData)
    {
        NSMutableDictionary = newDocumentDict = [documentDict mutableCopy];
        [newDocumentDict setObject:officeId forKey:@"OfficeId"];
        [newMappableData addObject:newDocumentDict];
    }

    *mappableData = newMappableData;
}

And use something similar to the following in your Document mapping:

[documentMapping mapAttributes:@"AddedDate", @"Title", @"Uri", @"OfficeId", nil];
[documentMapping mapKeyPath:@"" toRelationship:@"office" withMapping:officeMapping];
[documentMapping connectRelationship:@"office" withObjectForPrimaryKeyAttribute:@"OfficeId"];
于 2012-08-17T13:48:07.893 に答える
0

私は通常RKObjectMapping、 managedObject クラスに追加します

これを Document.h に追加します

  + (RKObjectMapping *)objectMapping;

このメソッドを Document.m に追加します。

+ (RKObjectMapping *)objectMapping {
RKManagedObjectMapping *mapping = [RKManagedObjectMapping mappingForClass:[self class] inManagedObjectStore:[[RKObjectManager sharedManager] objectStore]];
     mapping.primaryKeyAttribute = @"word";
    [mapping mapKeyPath:@"word" toAttribute:@"word"];
    [mapping mapKeyPath:@"min_lesson" toAttribute:@"minLesson"];

}

もちろん、Document オブジェクト プロパティへのキー パスを変更する必要があります。各ペアは、サーバーが応答するキーの名前であり、対応する managedObject の keyPath です。

次に、を初期化するときに、objectManager持っている各 managedObject のマッピングを設定できます。

 RKManagedObjectStore *store = [RKManagedObjectStore objectStoreWithStoreFilename:databaseName usingSeedDatabaseName:seedDatabaseName managedObjectModel:nil delegate:self];
objectManager.objectStore = store;

 //set the mapping object from your Document class
[objectManager.mappingProvider setMapping:[SRLetter objectMapping] forKeyPath:@"Document"];

ここで優れたチュートリアルを見つけることができます - RestKit チュートリアル。記事の途中に、マッピングに関するデータがあります。

于 2012-08-17T13:33:20.503 に答える