Требование: приложение My Watch будет отображать последние данные с нашего сервера.Связь между приложением часов и родительским приложением iphone
Я пробовал:
Чтобы реализовать эту вещь, я использовал
WKInterfaceController.openParentApplication(requestDict, reply: { (returnedObject, error) -> Void in
if (returnedObject != nil) {
//loading interface data here
}
})
В моей функции приложения делегат я использовал
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void(^)(NSDictionary *replyInfo))reply {
// doing web service call using asynchronous nsurlconnection and replying with response dictionary
}
Проблема: Проблема заключается в том, что приложение работает отлично, когда приложение iPhone является передним, но wa Приложение tch ничего не показывает, когда приложение iPhone работает в фоновом режиме. Я отлаживал его и обнаружил, что, когда приложение iPhone работает с фоновым файлом, а затем webservice api call (nsurlconnection) не перенастраивает какие-либо данные, когда он выходит на передний план, тогда он отвечает на данные для просмотра приложения.
Чтобы решить эту проблему, я использовал nsuserdafults для хранения данных, но проблема в том, что она не всегда показывает последние данные. Давайте рассмотрим приложение, открытое пользователем, и оно отправится в родительское приложение и вернет старые данные из userdafults.
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void(^)(NSDictionary *replyInfo))reply {
if ([userInfo[@"type"] isEqualToString:@"list"]) {
[self fetchWatchData];//it will get and store data when app will be foreground
NSDictionary *replyDict = [UtiltiyManager getWatchData];//data from userdefaults
if (replyDict) {
reply(replyDict);
}else {
NSDictionary *noDataDict = @{@"data":@"nodata"};
reply(noDataDict);
}
}
}
Проблема в том, что приложение-наблюдатель не может получить последние данные с iphone, пока оно находится в фоновом режиме. Поскольку нет сервиса call api, который будет работать в фоновом режиме. Я проверил с NSURLConnection, а NSURLSessionDataTask - это вызов api переднего плана.
Любые решения или мысли?
Update 1:
Яблоко Docs говорит:
Типы задач в рамках сессии, класс NSURLSession поддерживает три типа задач: задачи данных, задачи загрузки и выгрузки задания.
Задачи данных отправлять и получать данные с использованием объектов NSData. Задачами данных являются , предназначенные для коротких, часто интерактивных запросов из вашего приложения на сервер . Задачи данных могут возвращать данные в ваше приложение по одному фрагменту за один раз после получения каждой части данных или сразу через обработчик завершения . Поскольку задачи данных не хранят данные в файле , они не поддерживаются в фоновых сеансах. Задачи загрузки извлекают данные в виде файла и поддерживают загрузку фона , пока приложение не запущено. Загрузка задач отправляет данные (обычно в форме файла ) и поддерживает загрузку фона, пока приложение не работает .
Apple сообщила, что задачи с данными не доступны в фоновом режиме. И мои данные - это небольшие данные веб-службы, которые могут быть выбраны с помощью задачи данных. поэтому мой вызов службы не загружается. Таким образом, в случае, когда iPhone приложение является фоном, как приложение будет получать данные веб-службы.
Должны ли мы использовать задачу загрузки? Но я предполагаю, что он предназначен для загрузки любого файла.
Вы можете попробовать следующее: http://stackoverflow.com/questions/30000274/calling-parent-application-from-watch-app Работает ли это в вашем случае? – vomako