1

アプリケーションで RestKit/CoreData を実装する際に問題が発生しています。RKTwitterCoreData サンプル アプリケーションを使用し、それを json フィードの Web サービスにポイントすると、次のテーブルビューが得られます。

重複オブジェクト/ID が正しく表示されない

これまでに発生した問題:

  1. primaryKeyAttribute が orderID に設定されていても、Refresh によって新しいコア データ エントリが生成されます。
  2. セルの textLabel に、自分の Web サービスと一致しない奇妙な orderID が表示される

これが私のapplicationDidFinishLaunchingWithOptionsです:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Initialize RestKit
RKObjectManager* objectManager = [RKObjectManager managerWithBaseURLString:@"http://mywebservice.com"];

// Enable automatic network activity indicator management
objectManager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES;

NSString *databaseName = @"RKTwitterData.sqlite";
objectManager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:databaseName usingSeedDatabaseName:nil managedObjectModel:nil delegate:self];

RKManagedObjectMapping* statusMapping = [RKManagedObjectMapping mappingForClass:[Order class] inManagedObjectStore:objectManager.objectStore];
statusMapping.primaryKeyAttribute = @"orderID";
[statusMapping mapKeyPath:@"id" toAttribute:@"orderID"];
[statusMapping mapAttributes:@"created_at", nil];

// Register our mappings with the provider
[objectManager.mappingProvider setObjectMapping:orderMapping forResourcePathPattern:@"/orders"];

// Create Window and View Controllers
RKTwitterViewController* viewController = [[[RKTwitterViewController alloc] initWithNibName:nil bundle:nil] autorelease];
UINavigationController* controller = [[UINavigationController alloc] initWithRootViewController:viewController];
UIWindow* window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
[window addSubview:controller.view];
[window makeKeyAndVisible];

return YES;
}

/orders での json の結果:

ここに画像の説明を入力

この問題に対処するためのアドバイスはありますか? ありがとう!

4

1 に答える 1

0

ドー!その理由は、TwitterAPIがKeyValueコーディングに準拠していないためです。私が変更したら:

 [objectManager.mappingProvider setObjectMapping:orderMapping forResourcePathPattern:@"/orders"];

と:

 [objectManager.mappingProvider setObjectMapping:orderMapping forKeyPath:@"orders"];

それは再び働いた!

ありがとう、そしてそれが誰かを助けることを願っています。

于 2012-07-03T01:02:11.360 に答える