2014-02-14 5 views
0

У меня есть объект-гость, а внутри гость - объект City. Я установил relashionship в CoreData и RestKit, используя RKRelationshipMapping.RestKit - Отображение привязки с CoreData - Ошибка ответа

Я сопоставляются единое целое правильно, но когда я использую RKRelationshipMapping добавить City Entity, кажется, генерировать эту ошибку при вызове следующего метода с @ «CityId» свойство:

-[RKPropertyInspector classForPropertyNamed:ofEntity:]: unrecognized selector sent to instance 

Мой код отображения:

RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:self.serverBaseAddress]]; 
    objectManager.managedObjectStore = [RKManagedObjectStore defaultStore]; 

    [RKObjectManager setSharedManager:objectManager]; 

    RKEntityMapping *cityEMapping = [RKEntityMapping mappingForEntityForName:self.cityEntityName inManagedObjectStore:[RKManagedObjectStore defaultStore]]; 
    [cityEMapping addAttributeMappingsFromDictionary:@{ 
                 @"id" : @"cityId", 
                 @"name" : @"name" 
                 }]; 

    RKEntityMapping *guestEMapping = [RKEntityMapping mappingForEntityForName:self.entityName inManagedObjectStore:[RKManagedObjectStore defaultStore]]; 
    [guestEMapping addAttributeMappingsFromDictionary:@{ 
                 @"name"  : @"name", 
                 @"photo" : @"photo", 
                 @"comment" : @"comment", 
                 @"id"  : @"guestId", 
                 @"date"  : @"date" 
                 }]; 

    [guestEMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"city" 
                        toKeyPath:@"city" 
                       withMapping:cityEMapping]]; 

    guestEMapping.identificationAttributes = @[ @"guestId" ]; 

    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:guestEMapping method:RKRequestMethodAny pathPattern:self.postGetAddress keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 
    [objectManager addResponseDescriptor:responseDescriptor]; 

А где приложение останавливается: (PropertyClass получение 0х00 в PropertyClass = [[RKPropertyInspector sharedInspector] ...)

- (Class)classForKeyPath:(NSString *)keyPath 
{ 
    NSArray *components = [keyPath componentsSeparatedByString:@"."]; 
    Class propertyClass = self.objectClass; 
    for (NSString *property in components) { 
     propertyClass = [[RKPropertyInspector sharedInspector] classForPropertyNamed:property ofClass:propertyClass isPrimitive:nil]; 
     if (! propertyClass) propertyClass = [[RKPropertyInspector sharedInspector] classForPropertyNamed:property ofEntity:self.entity]; 
     if (! propertyClass) break; 
    } 

    return propertyClass; 
} 

А вот JSON:

[{"id":"3","name":"Convidado3","city":{"id":"2","name":"São Paulo"},"date":"Data2","comment":"comentario3","photo":":P"}, 
    {"id":"2","name":"Convidado2","city":{"id":"1","name":"Rio de Janeiro"},"date":"Data2","comment":"comentario2","photo":":|"}, 
    {"id":"1","name":"Convidado1","city":{"id":"1","name":"Rio de Janeiro"},"date":"Data1","comment":"comentario1","photo":":)"}, 
    {"id":"5","name":"Convidado5","city":{"id":"4","name":"Vitória"},"date":"Data4","comment":"comentario5","photo":":K"}, 
    {"id":"4","name":"Convidado4","city":{"id":"3","name":"Belo Horizonte"},"date":"Data3","comment":"comentario4","photo":";)"}] 

Субъект Гость имеет отношение с именем города, который подключен к городской Сущности через отношения под названием гости в следующем порядке:
Гостя ..... город
город < --- >> гости

Если я просто удалить его связь работает нормально, без города к югу от объекта ... Любая помощь или предложения оценили ...

+0

Вы не пропустите атрибут идентификации в своем городе? – Alexis

+0

Правильно ли вы установили значения компоновщика? – Wain

+0

Хорошо, я добавил атрибут идентификации в картографировании города (после 'RKEntityMapping * cityEMapping'),' cityEMapping.identificationAttributes = @ [@ "cityId"]; 'теперь ошибка находится в другом месте:' static NSArray * RKArrayOfAttributesForEntityFromAttributesOrNames (NSEntityDescription * entity, NSArray * attributesOrNames) '... Я вижу объект-гость, и у него есть свойство city с NSRelationshipDescription как значение. Но все же, когда код запускает атрибут NSAttributeDescription * = [[entity attributesByName] valueForKey: attributeOrName]; 'attribute получает nil ..., и это вызывает« NSException » – Gabriel

ответ

0

Я решил эту проблему:

После прохождения всех этапов отладки, я изменил следующую строку

От:

RKEntityMapping *cityEMapping = [RKEntityMapping mappingForEntityForName:self.cityEntityName inManagedObjectStore:[RKManagedObjectStore defaultStore]]; 

To:

RKEntityMapping *cityEMapping = [RKEntityMapping mappingForEntityForName:@"City" inManagedObjectStore:[RKManagedObjectStore defaultStore]]; 

И это wo rked!

Я не понимаю эту проблему, так как я проверил значение self.cityEntityName во время отладки и это @ «Сити», так что технически она должна работать. Что касается линии:

RKEntityMapping *guestEMapping = [RKEntityMapping mappingForEntityForName:self.entityName inManagedObjectStore:[RKManagedObjectStore defaultStore]]; 

работает просто отлично ... без каких-либо изменений, я не знаю, что сказать. Спасибо за предложения.

Смежные вопросы