2013-04-16 2 views
3

Я пытаюсь обновить существующее приложение, использующее Restkit 0.1 до 0.20, но перед созданием Core Data Stack возникают проблемы, когда он запускается в исключение.Инициализация основных данных с помощью RestKit 0.20

У меня есть следующий код на моем AppDelegate:

 /* 
    Complete Core Data stack initialization 
    */ 
    NSError *error = nil; 
    NSURL *modelURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"AppModel" ofType:@"momd"]]; 
    // NOTE: Due to an iOS 5 bug, the managed object model returned is immutable. 
    NSManagedObjectModel *managedObjectModel = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL] mutableCopy]; 
    RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel]; 
    [managedObjectStore createPersistentStoreCoordinator]; 
    NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"TSI.sqlite"]; 
    NSString *seedPath = [[NSBundle mainBundle] pathForResource:@"RKSeedDatabase" ofType:@"sqlite"]; 
    //NSPersistentStore __unused *persistentStore = [managedObjectStore addInMemoryPersistentStore:&error]; 
    NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:seedPath withConfiguration:nil options:nil error:&error]; 
    NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error); 
    /* 
    RESTKIT 
    */ 
    // Create the managed object contexts 
    [managedObjectStore createManagedObjectContexts]; 
    managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext]; 

И тогда мои отображения создаются в TableViewController согласно:

RKManagedObjectStore *managedObjectStore = [RKManagedObjectStore defaultStore]; 
    NSManagedObjectContext* context = [managedObjectStore mainQueueManagedObjectContext]; 

    NSString *rootKeyPath; 
    rootKeyPath = @"body"; 
    NSString *endpoint = @"account/login.json"; 
    RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName:@"User" inManagedObjectStore:managedObjectStore]; 
    [entityMapping addAttributeMappingsFromDictionary:@{ 
    @"api_token":@"token", 
    @"email": @"email", 
    @"first_name": @"name", 
    @"last_name": @"surname" 
    }]; 
    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:entityMapping pathPattern:endpoint keyPath:rootKeyPath statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[TSI_SERVER stringByAppendingString:endpoint]]]; 
    RKManagedObjectRequestOperation *managedObjectRequestOperation = [[RKManagedObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[ responseDescriptor ]]; 
    //managedObjectRequestOperation.managedObjectContext = self.managedObjectContext; 
    [[NSOperationQueue currentQueue] addOperation:managedObjectRequestOperation]; 

Но всякий раз, когда я пытаюсь получить данные, после загрузки представления я получаю следующую ошибку в консоли (по соображениям безопасности я замаскировал имя и сервер, которые использует мое приложение):

2013-04-16 14:41:50.576 <<MyApp>>[4525:907] I restkit:RKLog.m:34 RestKit logging initialized... 
2013-04-16 14:41:51.009 <<MyApp>>[4525:907] [HEATMA.PS] Running Heatma.ps version 4.0.2. For help go to www.heatma.ps/support 
2013-04-16 14:42:54.464 <<MyApp>>[4525:3907] *** Assertion failure in 
-[RKManagedObjectResponseMapperOperation performMappingWithObject:error:], /Users/manuel_matute/Code/RestKit/Code/Network/RKResponseMapperOperation.m:358 
2013-04-16 14:42:59.876 <<MyApp>>[4525:3907] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unable to perform mapping: No `managedObjectContext` assigned. (Mapping response.URL = http://www.<<myserver>>.com/rest/account/login.json)' 
*** First throw call stack: (0x32a7b2a3 0x3a7a397f 0x32a7b15d 0x33350ab7 0xe37e1 0xe1b97 0x333085c1 0x33380be3 0x3abbb11f 0x3abbf961 0x3abbfac1 0x3abefa11 0x3abef8a4) libc++abi.dylib: terminate called throwing an exception 

Есть ли у кого-нибудь представление о том, что может быть проблемой?

Спасибо!

ответ

6

Решенный!

Похоже, что мне нужно, чтобы явно присвоить контекст для managedObjectRequestOperation как:

managedObjectRequestOperation.managedObjectContext = context; 
Смежные вопросы