2013-01-10 1 views
5

RestKit과 CoreData를 함께 사용하려고합니다. 나는 더 가까워지고 있어요,하지만 난 다음 오류 받고 있어요 :엔티티 (null)가 키 "제목"에 대해 키 값을 코딩하지 않습니다.

CoreData: error: Failed to call designated initializer on NSManagedObject class 'Book' 
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: 
    '[<Book 0x8454560> valueForUndefinedKey:]: the entity (null) is not key value coding-compliant for the key "title".' 

성공적으로 내 예약 클래스를 찾는 것, 그것이 제목 속성을 가지고 나에게 보인다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?


Books.xcdatamodel

Book 
    title: String 

나는 내 수업을 만들 수 mogenerator을 사용하고 다음 (JSON)을 반환 localhost:3000/books/initial에서 URL을

[{title:"one"}, {title:"two"}] 

있습니다. Book에는 아무 것도 추가하지 않았지만 _Book에는 title 속성이 명확하게 정의되어 있습니다.

마지막으로 요청을로드하는 데 사용하는 코드는 다음과 같습니다.

RKObjectManager* objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://localhost:3000/"]]; 
RKManagedObjectStore* objectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:self.model]; 
objectManager.managedObjectStore = objectStore; 

// Mappings 
RKEntityMapping *bookMapping = [RKEntityMapping mappingForEntityForName:@"Book" inManagedObjectStore:objectStore]; 
[bookMapping addAttributeMappingsFromArray:@[@"title"]]; 

RKResponseDescriptor * responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:bookMapping pathPattern:@"books/initial/" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

[objectManager addResponseDescriptor:responseDescriptor]; 

// Send Request 
[objectManager getObjectsAtPath:@"/books/initial/" parameters:nil success:^(RKObjectRequestOperation * operation, RKMappingResult *mappingResult) { 
    NSLog(@"SUCCESS"); 
} failure: ^(RKObjectRequestOperation * operation, NSError * error) { 
    NSLog(@"FAILURE %@", error); 
}]; 

편집 : 내가 바로 RKTwitterCoreData 응용 프로그램에서 볼 수있는 //Send Request 부분, 전에 다음 줄을 추가했지만

// Other Initialization (move this to app delegate) 
[objectStore createPersistentStoreCoordinator]; 
[objectStore createManagedObjectContexts]; 

objectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:objectStore.persistentStoreManagedObjectContext]; 

답변

4

문제는 매핑에서 경로가 올바르지 않다는 것입니다. 나는 http://localhost:3000이어야하는 나의 도메인으로 http://localhost:3000/을 가지고 있었고, 내가 /books/initial/ 이었음에 틀림없는 경로로서 books/initial/을 가지고 있었다.

RestKit 0.20 — CoreData: error: Failed to call designated initializer on NSManagedObject class가 나는 또한 영구 저장소를 생성하는 것을 잊었다 참조하십시오. 여기에 전체 예제가 나와 있습니다.

// Core Data Example 
// Initialize RestKIT 
RKObjectManager* objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://localhost:3000"]]; 
RKManagedObjectStore* objectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:self.model]; 
objectManager.managedObjectStore = objectStore; 

// Mappings 
RKEntityMapping *bookMapping = [RKEntityMapping mappingForEntityForName:@"Book" inManagedObjectStore:objectStore]; 
[bookMapping addAttributeMappingsFromArray:@[@"title"]]; 

RKResponseDescriptor * responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:bookMapping pathPattern:@"/books/initial/" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

[objectManager addResponseDescriptor:responseDescriptor]; 

// Other Initialization (move this to app delegate) 
[objectStore createPersistentStoreCoordinator]; 

NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"RKTwitter.sqlite"]; 
NSString *seedPath = [[NSBundle mainBundle] pathForResource:@"RKSeedDatabase" ofType:@"sqlite"]; 
NSError *error; 
NSPersistentStore *persistentStore = [objectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:seedPath withConfiguration:nil options:nil error:&error]; 
NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error); 

[objectStore createManagedObjectContexts]; 

objectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:objectStore.persistentStoreManagedObjectContext]; 

// Send Request 
[objectManager getObjectsAtPath:@"/books/initial/" parameters:nil success:^(RKObjectRequestOperation * operation, RKMappingResult *mappingResult) { 
    NSLog(@"SUCCESS"); 
} failure: ^(RKObjectRequestOperation * operation, NSError * error) { 
    NSLog(@"FAILURE %@", error); 
}]; 
2

내가 볼 수없는 나는 여전히 같은 오류가 여기서 영구 저장소를 추가했습니다. 그렇게하는 것을 잊었습니까?

+0

내가 빠진 것이 틀림 없습니다. 나는 지저귐 앱에서 그것을 찾으려고 노력하고있다. 내가 가진 것은 위의 + 기본 코어 데이터 템플릿입니다. –

+0

'createManagedObjectContexts'를 추가했는데 예제가'addPersistentStore'를 사용하는 곳을 보지 못했습니다. 여전히 작동하지 않습니다. –