2013-09-04 2 views
0

Я пытаюсь сделать запрос POST с RestKit, но когда я называю метод postObject моего RKObjectManager Я получаю следующее сообщение об ошибке:POST с RestKit 0,20 - NSManagedObjectContext вопрос

Can only use -performBlockAndWait: on an NSManagedObjectContext that was created with a queue. 

Это ошибка возникла, когда метод выполнитьBlockAndWait вызывается классом RKManagedObjectRequestOperation.

Вот мой код:

RKObjectMapping *responseMapping = [RKObjectMapping requestMapping]; 
[responseMapping addAttributeMappingsFromDictionary:@{ 
// ... 
}]; 

NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful); // Anything in 2xx 
NSString *pathPattern = @"myPath"; 
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping method:RKRequestMethodPOST pathPattern:pathPattern keyPath:nil statusCodes:statusCodes]; 

RKObjectMapping *requestMapping = [RKObjectMapping requestMapping]; 
[requestMapping addAttributeMappingsFromDictionary:@{ 
// ... 
}]; 

RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping objectClass:[MyClass class] rootKeyPath:@"" method:RKRequestMethodPOST]; 

NSURL *baseURL = [NSURL URLWithString:@"http://192.168.1.1:8080"]; 
RKObjectManager *manager = [RKObjectManager managerWithBaseURL:baseURL]; 
[manager addRequestDescriptor:requestDescriptor]; 
[manager addResponseDescriptor:responseDescriptor]; 

NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; 
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel]; 
manager.managedObjectStore = managedObjectStore; 

[managedObjectStore createPersistentStoreCoordinator]; 
NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"mySqliteDatabaseFile"]; 
NSError *error; 
NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:nil withConfiguration:nil options:nil error:&error]; 

NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error); 

[managedObjectStore createManagedObjectContexts]; 
managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext]; 

// POST to create 
@try { 
    [manager postObject:visitReport path:@"myPath" parameters:nil success:^(RKObjectRequestOperation *operation , RKMappingResult *mappingResult) { 
     NSLog(@"Success"); 
    } failure:^(RKObjectRequestOperation *operation , NSError *error){ 
     NSLog(@"Failure - %@",error); 
    }]; 
} 
@catch (NSException *exception) { 
    NSLog(@"error - %@", exception); 
} 

Я не понимаю проблему с моим контексте, любая помощь приветствуется. Спасибо.

+0

Вы используете 'postObject', но у вас нет сопоставлений для применения ответа на объект, который был опубликован? Вывешенный объект является сущностью, но вы хотите перевести обратно в словарь? – Wain

+0

Правильно, мне не нужно было возвращаться к словарю. Но у меня все еще есть начальная ошибка – ragu89

ответ

1

Ok, наконец, я нашел проблему:

Объект visitReport я пытался пост не из NSManagedObjectContext ожидаемого RestKit.

Чтобы решить, я создаю новый объект:

MyObject *visitReportContext = [NSEntityDescription insertNewObjectForEntityForName:@"tableName" 
                inManagedObjectContext:objectStore.mainQueueManagedObjectContext]; 
visitReportContext.Id = visitReport.Id 
visitReportContext.title = visitReport.title 
// etc.. 

Затем, когда я выкладываю свой новый объект, он работает. Но это не очень красиво ... Как я могу справиться со своим старым объектом visitReport, не создавая новый в этом «контексте RestKit»?

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