Вопрос

У меня есть объект для моего пользователя объекта

RKObjectMapping* userMapping = [RKObjectMapping mappingForClass:[User class]];
[userMapping mapKeyPath:@"first_name" toAttribute:@"firstName"];
[userMapping mapKeyPath:@"last_name" toAttribute:@"lastName"];
[manager.mappingProvider setMapping:userMapping forKeyPath:@"users"];
[manager.mappingProvider setSerializationMapping:[userMapping inverseMapping] forClass:[User class]];

И я хочу сохранить его профиль, когда приложение идет на фоне:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [[RKObjectManager sharedManager] putObject:currentUser delegate:self];
}

Но это не позволит мне запустить запрос при закрытии приложения (я предполагаю, что новые потоки не допускаются). Так что я хотел бы сделать это синхронно.

Тем не менее, мне не удалось сделать это с Restkit. Есть ли недопонимание на моей стороне? Я бы хотел:

[[RKObjectManager sharedManager] putObjectSynchronously:currentUser];
Это было полезно?

Решение

Если вам нужно отправить синхронно, вы не сможете использовать удобные методы на RkobjectManager, например, PutObject, потому что все эти методы удобства посылают запрос асинхронно от вашего имени. Вместо этого вы можете попробовать что -то вроде следующего:

RKObjectLoader* loader = [[RKObjectManager sharedManager] objectLoaderForObject:currentUser method:RKRequestMethodPUT delegate:nil];
RKResponse* response = [loader sendSynchronously];

Другие советы

Это Можно выполнять с помощью Restkit и удобных методов на rkobjectmanager. Хитрости в Используйте блоки.

В вашем случае вы сделаете ваш запрос, используя блок, установите обычные методы OnDidfail, OnDidLoadObjects, OnDidLoadResponse и т. Д. Методы на «загрузчик», а не как методы делегирования в классе, а затем закроете приложение в блоке. Например, код в методе Loader.ondidLoadObjects не будет выполняться до тех пор, пока не будет завершен putObject, так что, вероятно, там, где вы захотите закрыть экран или приложение. Это гарантирует, что PutObject завершится, прежде чем двигаться дальше.

Смотрите больше в моем ответе - Сделайте синхронный http -звонок с Restkit.

как насчет:

RKRequest *request = [client post:@"/service" params:params delegate:restDelegate];

RKResponse *response = [request sendSynchronously];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top