2013-12-11 2 views
1

Мне нужно отобразить гибкую структуру данных с помощью RestKit, но мне не повезло.Отображение данных RestKit, приводящее к сбою приложения

У меня есть активность ресурс, который содержит массив Extra суб-ресурсов. Каждый из этих Дополнительный ресурсов содержит ключ и значение . Конечно, поскольку последние не являются реальными ресурсами, для них нет никакого смысла иметь идентификатор.

Здесь есть пример активность ресурса:

{ 
      "_id": "xxxxx", 
      ... 
      "extras": [ 
       { 
        "key": "group", 
        "value": "xxxx" 
       }, 
       { 
        "key": "name", 
        "value": "xxxxx" 
       }, 
       { 
        "key": "asd", 
        "value": "xxx" 
       } 
      ] 
    } 

Здесь есть код я использую для отображения:

- (RKEntityMapping *)activityMapping { 
RKEntityMapping * activityMapping = [RKEntityMapping mappingForEntityForName:@"SSActivity" 
                 inManagedObjectStore:self.managedObjectStore]; 
[activityMapping addAttributeMappingsFromDictionary:@{ 
                 @"_id"   : @"activityId" 
                 }]; 

[activityMapping addRelationshipMappingWithSourceKeyPath:@"extras" mapping:[self activityExtraMapping]]; 

activityMapping.identificationAttributes = @[@"activityId"]; 

return activityMapping; 
} 

- (RKEntityMapping *)activityExtraMapping { 
    RKEntityMapping * activityExtraMapping = [RKEntityMapping mappingForEntityForName:@"SSActivityExtra" 
                 inManagedObjectStore:self.managedObjectStore]; 
[activityExtraMapping addAttributeMappingsFromDictionary:@{ 
                  @"key" : @"key", 
                  @"value" : @"value" 
                  }]; 
return activityExtraMapping; 
} 

SSActivityExtra класс содержит только ключ и Значение свойства строки, тогда как SSActiv ity содержит дополнительно Недвижимость.

@property (nonatomic, retain) NSSet * extras;

Теперь, как только restkit отображает запрос я возвращусь следующее исключение:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM _stateFlags]: unrecognized selector sent to instance 0xadc4560' 
*** First throw call stack: 
(
0 CoreFoundation      0x0358b5e4 __exceptionPreprocess + 180 
1 libobjc.A.dylib      0x0330e8b6 objc_exception_throw + 44 
2 CoreFoundation      0x03628903 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275 
3 CoreFoundation      0x0357b90b ___forwarding___ + 1019 
4 CoreFoundation      0x0357b4ee _CF_forwarding_prep_0 + 14 
5 CoreData       0x00bad03e -[NSRelationshipDescription(_NSInternalMethods) _nonPredicateValidateValue:forKey:inObject:error:] + 270 
6 CoreData       0x00babdeb -[NSManagedObject(_NSInternalMethods) _validateValue:forProperty:andKey:withIndex:error:] + 379 
7 CoreData       0x00c3b408 -[NSManagedObject validateValue:forKey:error:] + 136 
8 Foundation       0x013f12c0 -[NSObject(NSKeyValueCoding) validateValue:forKeyPath:error:] + 435 
9 SeeApp        0x00207cee -[RKMappingOperation validateValue:atKeyPath:] + 398 
10 SeeApp        0x00208434 -[RKMappingOperation shouldSetValue:forKeyPath:usingMapping:] + 1108 
11 SeeApp        0x0020dd77 -[RKMappingOperation mapOneToManyRelationshipWithValue:mapping:] + 2503 
12 SeeApp        0x002101cf -[RKMappingOperation applyRelationshipMappings] + 6815 
13 SeeApp        0x00212540 -[RKMappingOperation main] + 4224 
14 Foundation       0x01405829 -[__NSOperationInternal _start:] + 671 
15 Foundation       0x01382558 -[NSOperation start] + 83 
16 SeeApp        0x001ffb25 -[RKMapperOperation mapRepresentation:toObject:atKeyPath:usingMapping:metadata:] + 1957 
17 SeeApp        0x001ff14c __63-[RKMapperOperation mapRepresentations:atKeyPath:usingMapping:]_block_invoke + 460 
18 CoreFoundation      0x035855eb __NSArrayEnumerate + 571 
19 CoreFoundation      0x03585196 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 102 
20 CoreFoundation      0x035850a5 -[NSArray enumerateObjectsUsingBlock:] + 53 
21 SeeApp        0x001fedfc -[RKMapperOperation mapRepresentations:atKeyPath:usingMapping:] + 2364 
22 SeeApp        0x00200c10 -[RKMapperOperation mapRepresentationOrRepresentations:atKeyPath:usingMapping:] + 560 
23 SeeApp        0x00201672 -[RKMapperOperation mapSourceRepresentationWithMappingsDictionary:] + 2210 
24 SeeApp        0x0020203b -[RKMapperOperation main] + 1403 
25 Foundation       0x01405829 -[__NSOperationInternal _start:] + 671 
26 Foundation       0x01382558 -[NSOperation start] + 83 
27 SeeApp        0x002542a7 __73-[RKManagedObjectResponseMapperOperation performMappingWithObject:error:]_block_invoke + 4887 
28 CoreData       0x00bccfef developerSubmittedBlockToNSManagedObjectContextPerform + 95 
29 libdispatch.dylib     0x045474b0 _dispatch_client_callout + 14 
30 libdispatch.dylib     0x04534778 _dispatch_barrier_sync_f_invoke + 58 
31 libdispatch.dylib     0x04534422 dispatch_barrier_sync_f + 89 
32 CoreData       0x00bccf1f -[NSManagedObjectContext performBlockAndWait:] + 127 
33 SeeApp        0x00252a91 -[RKManagedObjectResponseMapperOperation performMappingWithObject:error:] + 993 
34 SeeApp        0x00250413 -[RKResponseMapperOperation main] + 2371 
35 Foundation       0x01405829 -[__NSOperationInternal _start:] + 671 
36 Foundation       0x01382558 -[NSOperation start] + 83 
37 Foundation       0x01407af4 __NSOQSchedule_f + 62 
38 libdispatch.dylib     0x045474b0 _dispatch_client_callout + 14 
39 libdispatch.dylib     0x0453507f _dispatch_queue_drain + 452 
40 libdispatch.dylib     0x04534e7a _dispatch_queue_invoke + 128 
41 libdispatch.dylib     0x04535e1f _dispatch_root_queue_drain + 83 
42 libdispatch.dylib     0x04536137 _dispatch_worker_thread2 + 39 
43 libsystem_pthread.dylib    0x048d3dab _pthread_wqthread + 336 
44 libsystem_pthread.dylib    0x048d7cce start_wqthread + 30 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

Я знаю, что это может быть похоже на this, но я думаю, что это не так, предлагаемые решения сделали нет помощи.

Любые идеи о том, что здесь происходит? Я боролся с этим в течение 2 дней.

Редактировать 12-12: Добавлены модели скриншоты

модель данных SSActivityExtra

SSActivityExtra data model

SSActivity модель данных

SSActivity data model

+0

Включите ведение журнала трассировки и добавьте точку останова исключения, чтобы попытаться получить больше информации о местоположении исключения. Кроме того, вы можете добавить изображение своей модели данных. Есть ли у вас какие-либо методы проверки? – Wain

+0

Нет, у меня нет модели данных. Кроме того, я добавил скриншоты в соответствии с запросами. –

ответ

0

Не уверен, если это вызовет исключение, но этот код не так:

[activityExtraMapping addAttributeMappingsFromDictionary:@{ 
                 @"key" : @"key", 
                 @"value" : @"value" 
                 }]; 

, как это должно быть:

[activityExtraMapping addAttributeMappingsFromDictionary:@{ 
                 @"key" : @"extraKey", 
                 @"value" : @"extraValue" 
                 }]; 

Исключение может быть связано с extraKey и extraValue атрибутов, являющихся не- необязательно, поэтому возникает исключение, когда RestKit пытается сохранить модель ...

4

Я смог решить подобную проблему следующим образом: я не настроил отношения ко многим в Core Data. После настройки эта проблема была решена.

+0

это тоже решает мою проблему. –

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