RestKit -Проблемы с отображением объектов расширенных данных?

У меня проблема с отображением поля: latest_update в данных JSON.

Получение этих данных JSON из моего веб-сервиса:

{"Places":[ 
    {"place_ID": "7cceedda-ed3a-11e0-a1a8-858e3974979a", 
     "timestamp": "2011-10-02 23:24:42" 
    }, 
    {"place_ID": "7cceedda-ed3a-11e0-a1a8-858e3974933x", 
     "timestamp": "2011-10-02 23:24:42" 
    }, 
    {"latest_update":"2011-10-13 12:16:17"}] 

}

И фрагмент кода, который я использую для управляемого сопоставления:

 //Place mapping 
    if (!self.placeManagedObject){ 
        self.placeManagedObject = [RKManagedObjectMapping 
mappingForClass:[Place class]]; 
        self.placeManagedObject.primaryKeyAttribute = @"UUID"; 
        self.placeManagedObject.rootKeyPath = @"places"; 
        [self.placeManagedObject mapKeyPath:@"place_ID" 
toAttribute:@"UUID"]; 
        [self.placeManagedObject mapKeyPath:@"timestamp" 
toAttribute:@"timestamp"]; 
        [self.placeManagedObject mapRelationship:@"PlaceInformation" 
withMapping:self.placeInfoManagedObject]; 
        // Register mapping with the provider - means it will look for 
places in the JSON input 
        [objectManager.mappingProvider 
setMapping:self.placeManagedObject forKeyPath:@"places"]; 
    } 
    //latestDBUpdate timestamp mapping 
    if (!self.latestDBUpdateManagedObject){ 
        self.latestDBUpdateManagedObject = [RKManagedObjectMapping 
mappingForClass:[LatestDBUpdate class]]; 
        self.latestDBUpdateManagedObject.primaryKeyAttribute = 
@"latest_update"; 
        self.latestDBUpdateManagedObject.rootKeyPath = @"places"; 
        [self.latestDBUpdateManagedObject mapKeyPath:@"latest_update" 
toAttribute:@"latest_update"]; 
        // Register mapping with the provider - means it will look for 
places in the JSON input 
        [objectManager.mappingProvider 
setMapping:self.latestDBUpdateManagedObject 
forKeyPath:@"latest_update"]; 
    } 

RestKit правильно сопоставит объекты Place, например: {"place_ID": "7cceedda-ed3a-11e0-a1a8-858e3974979a", "timestamp": "2011-10-02 23:24:42"} ... в объекты места, но latest_update не отображается в объект LatestDBUpdate class, и я никак не могу заставить его работать.

Я надеюсь, что у кого-то есть ответ на вопрос, как это делается, потому что часы поиска и попыток не приблизили меня к решению. Спасибо Томас


person Thomas    schedule 17.10.2011    source источник


Ответы (1)


Итак, я наконец понял это. В основном небольшие настройки и пара ошибок от моего имени: - /

Итак, я изменил вывод JSON моего веб-сервиса на это форматирование:

{"Places":[ 
{"place_ID": "7cceedda-ed3a-11e0-a1a8-858e3974979a", 
 "timestamp": "2011-10-02 23:24:42" 
}, 
{"place_ID": "7cceedda-ed3a-11e0-a1a8-858e3974933x", 
 "timestamp": "2011-10-02 23:24:42" 
}], 
"Timestamps":[
{"latest_update":"2011-10-13 12:16:17"}]

У меня была ошибка при сопоставлении временных меток -> latest_update, поэтому я исправил это:

//latestDBUpdate timestamp mapping
if (!self.latestDBUpdateManagedObject){
    self.latestDBUpdateManagedObject = [RKManagedObjectMapping mappingForClass:[LatestDBUpdate class]];
    self.latestDBUpdateManagedObject.primaryKeyAttribute = @"latest_update";
    self.latestDBUpdateManagedObject.rootKeyPath = @"Timestamps";
    [self.latestDBUpdateManagedObject mapKeyPath:@"latest_update" toAttribute:@"latest_update"];

    // Register mapping with the provider - means it will look for the keyword Timestamps in the JSON input
    [self.objectManager.mappingProvider setMapping:self.latestDBUpdateManagedObject forKeyPath:@"Timestamps"];

А потом у меня была серьезная ошибка в моем методе get. В основном я сказал RestKit, что ответ должен отображаться только моим сопоставлением места и, таким образом, не проверять все другие данные во вводе JSON для других ключевых слов. Чтобы показать разницу, я представляю оба метода GET, которые я использовал. Первый будет отображать ТОЛЬКО с указанной схемой сопоставления, а номер два будет проверять все зарегистрированные схемы сопоставления:

Метод GET номер 1: (Это не работает в приведенном выше контексте!)

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:gPlaceListBaseUrl objectMapping:self.placeManagedObject delegate:self];

Метод GET номер 2: (Здесь проверяются все схемы сопоставления, и отображаются оба объекта Place, а также мой объект LatestDBUpdate!)

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:gPlaceListBaseUrl delegate:self];

Надеюсь, кому-нибудь это когда-нибудь понадобится: -D

Томас

person Thomas    schedule 18.10.2011