RestKit -проблемы с отображением объекта "расширенный объект данных"? - PullRequest
0 голосов
/ 17 октября 2011

У меня проблема с отображением поля: 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 объект, и я никак не могу заставить его работать.

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

1 Ответ

2 голосов
/ 18 октября 2011

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

Поэтому я изменил вывод 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"}]

У меня была ошибка ввременные метки og -> 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, что ответ должен отображаться только моим отображением Place и, таким образом, не проверять все другие данные во входных данных JSON для других ключевых слов.Просто чтобы показать разницу, я представляю оба метода GET, которые я использовал.Первый будет отображаться ТОЛЬКО с указанной схемой сопоставления, а номер два будет проверять со всеми зарегистрированными схемами сопоставления:

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

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

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

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

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

Томас

...