2011-12-07 37 views
2

我有以下JSON結構:JSON RKManagedObjectMapping與RestKit

{ 
    "users": 
    [ 
    { 
     "user_id":"000228D2-CB0D-4019-ADF9-66FE163E0BBC", 
     "firstname":"aFirstname", 
     "name":"aLastName", 
     "nickname":"user_nickname", 
     "email":"user_email", 
     "uri":"user_website", 
     "birthday":"1976-12-08 00:00:00", 
     "password":"49722f17a3838181cc9cf351df9d9054e465a778", 
     "recovery_key":"97011336-3A4C", 
     "language":"fr_FR", 
     "timezone":"Europe\/Paris", 
     "last_update":"0000-00-00 00:00:00", 
     "creation_date":"2011-11-24 15:03:50", 
     "status":"20" 
    } 
    , 
    { 
     "user_id":"100228D2-CB0D-4019-ADF9-66FE163E0BBC", 
     "firstname":"aFirstname", 
     "name":"aLastName", 
     "nickname":"user_nickname", 
     "email":"user_email", 
     "uri":"user_website", 
     "birthday":"1976-12-08 00:00:00", 
     "password":"49722f17a3838181cc9cf351df9d9054e465a778", 
     "recovery_key":"97011336-3A4C", 
     "language":"fr_FR", 
     "timezone":"Europe\/Paris", 
     "last_update":"0000-00-00 00:00:00", 
     "creation_date":"2011-11-24 15:03:50", 
     "status":"10" 
    } 
    ] 
} 

然後我在我的iPhone應用程序來處理JSON和核心數據對象下面的代碼。

的ObjectManager INIT:

RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:@"http://json_source_url.com"]; 
objectManager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES; 
NSString *databaseName = @"myDatastore.sqlite"; 
objectManager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:databaseName usingSeedDatabaseName:nil managedObjectModel:nil delegate:self]; 

對象映射設置:

RKManagedObjectMapping* userMapping = [RKManagedObjectMapping mappingForEntityWithName:@"User"]; 
userMapping.primaryKeyAttribute = @"userID"; 
[userMapping mapKeyPathsToAttributes:@"user_id", @"userID", 
@"firstname", @"firstname", 
@"name", @"name", 
@"nickname", @"nickname", 
@"email", @"email", 
@"uri", @"uri", 
@"birthday", @"birthday", 
@"password", @"password", 
@"recovery_key", @"recoveryKey", 
@"language", @"language", 
@"timezone", @"timezone", 
@"last_update", @"lastUpdate", 
@"creation_date", @"creationDate", 
@"status", @"status", 
nil]; 
[objectManager.mappingProvider setMapping:userMapping forKeyPath:@"users"]; 

與該配置它不工作。 ObjectLoader不會創建或更新coreData數據存儲中的任何內容。

如果我改變JSON結構與下面它就像一個魅力。

[ 
    { 
    "user_id":"000228D2-CB0D-4019-ADF9-66FE163E0BBC", 
    "firstname":"aFirstname", 
    "name":"aLastName", 
    "nickname":"user_nickname", 
    "email":"user_email", 
    "uri":"user_website", 
    "birthday":"1976-12-08 00:00:00", 
    "password":"49722f17a3838181cc9cf351df9d9054e465a778", 
    "recovery_key":"97011336-3A4C", 
    "language":"fr_FR", 
    "timezone":"Europe\/Paris", 
    "last_update":"0000-00-00 00:00:00", 
    "creation_date":"2011-11-24 15:03:50", 
    "status":"20" 
    } 
    , 
    { 
    "user_id":"100228D2-CB0D-4019-ADF9-66FE163E0BBC", 
    "firstname":"aFirstname", 
    "name":"aLastName", 
    "nickname":"user_nickname", 
    "email":"user_email", 
    "uri":"user_website", 
    "birthday":"1976-12-08 00:00:00", 
    "password":"49722f17a3838181cc9cf351df9d9054e465a778", 
    "recovery_key":"97011336-3A4C", 
    "language":"fr_FR", 
    "timezone":"Europe\/Paris", 
    "last_update":"0000-00-00 00:00:00", 
    "creation_date":"2011-11-24 15:03:50", 
    "status":"10" 
    } 
] 

謝謝您的幫助

+0

那麼你的問題是什麼?這聽起來像你得到它的工作。 – jadarnel27

+0

它的工作原理,但不是我想用的json結構。我提到的第一個{ 「用戶」: [ { – Appsido

回答

0

看:

RKObjectMapping* usersMapping = [RKObjectMapping mappingForClass:[MyClassForUserObjects class]]; 

[[RKObjectManager sharedManager].mappingProvider setMapping:statusMapping forKeyPath:@"users"]; 
+0

我想使用RKManagedObjectMapping,因爲我與CoreData鏈接。順便說一句,這不會更好 – Appsido

2

其實我終於找到了解決辦法。這只是聲明你的對象映射位於json響應的特定標記內的問題。在我的情況下,通過添加以下行「用戶」

userMapping.rootKeyPath = @「users」;

希望它可以幫助別人。


    RKManagedObjectMapping* userMapping = [RKManagedObjectMapping mappingForEntityWithName:@"User"]; 
    userMapping.primaryKeyAttribute = @"userID"; 
    userMapping.rootKeyPath = @"users"; 
    [userMapping mapKeyPathsToAttributes:@"user_id", @"userID", 
    @"firstname", @"firstname", 
    @"name", @"name", 
    @"nickname", @"nickname", 
    @"email", @"email", 
    @"uri", @"uri", 
    @"birthday", @"birthday", 
    @"password", @"password", 
    @"recovery_key", @"recoveryKey", 
    @"language", @"language", 
    @"timezone", @"timezone", 
    @"last_update", @"lastUpdate", 
    @"creation_date", @"creationDate", 
    @"status", @"status", 
    nil]; 
    [objectManager.mappingProvider setMapping:userMapping forKeyPath:@"users"];