2013-05-21 2 views
0

У меня есть управляемый объект MyEntity, который я использую без каких-либо проблем во всем приложении.RestKit - Не соответствует ключевому значению, кодируемому

@interface MyEntity : NSManagedObject 

@property (nonatomic, retain) NSString *code; 
@property (nonatomic, retain) NSNumber *def_value; 
@property (nonatomic, retain) NSString *label; 
@property (nonatomic, retain) NSString *link_label; 
@property (nonatomic, retain) NSNumber *order; 

@end 

У меня есть веб-сервис http://my_server/MyEntity который возвращает мне:

[ 
    { 
     CODE: "TYPE", 
     LABEL: "Administrative", 
     ORDER: "3", 
     DEF_VALUE: "0", 
     LINK_LABEL: "" 
    }, 
    { 
     CODE: "TOPIC", 
     LABEL: "NDF", 
     ORDER: "1", 
     DEF_VALUE: "0", 
     LINK_LABEL: "Administrative" 
    }, 
    { 
     CODE: "TOPIC", 
     LABEL: "Report", 
     ORDER: "2", 
     DEF_VALUE: "1", 
     LINK_LABEL: "Administrative" 
    }, 
    { 
     CODE: "TOPIC", 
     LABEL: "Other", 
     ORDER: "3", 
     DEF_VALUE: "0", 
     LINK_LABEL: "Administrative" 
    }, ... 
] 

Я пытаюсь карту и принести этот список

NSURL *baseUrl = [NSURL URLWithString: @"http://my_server"]; 
NSString *objName = @"MyEntity"; 
NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; 
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel]; 
[RKManagedObjectStore setDefaultStore:managedObjectStore]; 
[managedObjectStore createPersistentStoreCoordinator]; 

RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL: baseUrl]; 
RKEntityMapping *objMap = [RKEntityMapping mappingForEntityForName:objName inManagedObjectStore:managedObjectStore]; 
[objMap addAttributeMappingsFromDictionary: @{ 
    @"CODE": @"code", 
    @"LABEL": @"label", 
    @"ORDER": @"order", 
    @"DEF_VALUE": @"def_value", 
    @"LINK_LABEL": @"link_label", 
}]; 

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:objMap pathPattern:nil keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

[objectManager addResponseDescriptor:responseDescriptor]; 
[objectManager getObjectsAtPath:objName parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
    NSLog(@"ok"); 
} failure:^(RKObjectRequestOperation *operation, NSError *error) { 
    NSLog(@"ko"); 
}]; 

Это дает мне эту ошибку

I restkit.network:RKHTTPRequestOperation.m:185 GET 'http://my_server/MyEntity' (200 OK) CoreData: error: Failed to call designated initializer on NSManagedObject class 'MyEntity'
Terminating app due to uncaught exception 'NSUnknownKeyException', reason:
'[ valueForUndefinedKey:]: the entity (null) is not key value coding-compliant for the key "link_label".'

Я видел эту ошибку или по 2 или 3 вопросам, но каждый с другой проблемой и, похоже, не мой.

Может кто-нибудь помочь мне отладить это?

+0

Чем раньше ошибка, 'Не удалось вызвать обозначенную инициализатору на классе NSManagedObject «MyEntity» - это более непосредственная проблема и, вероятно, является причиной исключения кодирования ключевого значения. –

ответ

2

Вы должны полностью настроить objectManager:

objectManager.managedObjectStore = managedObjectStore; 

Вы также не завершая стека инициализации ядра данных:

[managedObjectStore createManagedObjectContexts]; 
+0

Это 'невозможно создать контексты управляемых объектов: постоянный координатор хранилища не имеет постоянных хранилищ –

+0

Вызывается после createPersistentStoreCoordinator, да? – Wain

+0

Я вызываю 'createPersistentStoreCoordinator', затем' createManagedObjectContexts' –

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