- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以 - 经过大量的游戏 - 我找到了一种让它发挥作用的方法,但我有一个东西我不知道如何绕过(并且让我发疯......)。
我有一个 watch 应用程序,需要来自 GooglePlaces 的数据(还没有适用于 iOS 的界面...)。因此 - 我使用 WCSession,并使用手机,使用 sendMessage
通过手机查询 GooglePlaces,将附近的地点返回到 watch 。
首先,GooglePlaces currentPlace
函数似乎是在调用它的同一线程上调用的(通过将其排队以供稍后使用)——这是一个问题,因为它被安排在程序运行之后已关闭(因为函数 didReceiveMessage
在调用之前就退出了)。因此,我没有在主队列上运行它,而是启动一个线程并在其上运行此代码......
它的一个问题是 replyHandler
必须在 session:didReceiveMessage
完成执行之前调用(否则,如果应用程序处于后台模式,进程将被终止)。
所以我为绕过这个问题而构建的代码看起来像这样(注意我在那里有一个嵌套的cloudKit代码..):
let queue = OperationQueue();
var finishedRunning = false;
queue.addOperation{
sleep(1);
self.placesClient?.currentPlace(callback: {
(placeLikelihoodList: GMSPlaceLikelihoodList?, error: Error?) -> () in
if let err = error {
retVal.removeAll();
retVal["error"] = err.localizedDescription;
finishedRunning = true;
return;
}
let predicate = NSPredicate(format: "selected = 1");
let query = CKQuery(recordType: "someInfo", predicate: predicate);
let privDb = CKContainer.default().privateCloudDatabase;
privDb.perform(query, inZoneWith: nil, completionHandler: {records, error in
if let err = error {
retVal.removeAll();
retVal["error"] = err.localizedDescription;
finishedRunning = true;
return;
}
retVal["completed"] = 1;
finishedRunning = true;
});
});
}
while !finishedRunning{
sleep(1);
}
marker = true;
replyHandler(retVal);
那些仔细阅读代码的人注意到我在开始队列后立即添加了一个 sleep(1);
命令。
我不清楚为什么,但是如果没有这个 sleep 调用,GooglePlaces 回调就不会被调用!!
我真的很想删除这个特定的调用..有人知道为什么会发生吗?如何绕过它?
(P.S.我不确定是否需要锁来保护finishedRunning
..既然它有效,我认为没有必要)。
附注#2 - 我知道它很“脏”,但没有其他方法可以绕过它......因为我想要 watch 上的这些数据,所以我放弃了优雅......
谢谢!!
最佳答案
根据我的经验,在委托(delegate)方法返回之前不必调用 sendMessage
的 replayHandler
,但如果您确实希望维持该行为,则可以摆脱它至少其中一个 `sleep(1) 如下:
<...>
queue.waitUntilAllOperationsAreFinished()
marker = true;
replyHandler(retVal);
我对 GooglePlaces API 一无所知,所以我不知道为什么需要其他 sleep 。综上所述,因为我不相信必须在委托(delegate)方法返回之前调用 replayHandler
的基本假设,所以切换到更异步的方式来执行此任务可能会更好。
关于ios - 获取 AppleWatch 的 GooglePlaces API(以及一般的异步调用)数据(使用 WCSession),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39554408/
我正在尝试为 watchkit 应用程序实现语音转文本功能。我提到了this有示例代码的问题。 以下是我试过的代码: self.presentTextInputControllerWithSugges
我们正在使用 Google Analytics,并想知道我们有多少用户拥有 AppleWatch。我在 Stack 中搜索了答案,重复出现的答案是使用这个: if WCSession.isSuppor
最近我意识到 Shazam 开发了一个 AppleWatch 应用程序,但在 StackOverflow 的许多问题和答案中,我们都谈到了直接从 watch 录制音频的可能性。 是否存在一种新的方法来
我正在尝试从 AppleWatch 扩展中读取应用程序 UserDefaults,经过 2 天的研发失败后,我发布了这个帖子。 例如,我正在尝试做的是使用以下代码(即使应用程序已终止)来确定用户是否登
我有一个 iOS 应用程序,我在 appleWatch 上为它编写了一个扩展程序。我正在使用 transferUserInfo 方法将数据 (NSDictionary) 发送到 appleWatch
我们有一个客户使用我们的源代码。该项目包括 Apple Watch,但他们还不想将其构建到他们的应用程序中。他们删除了嵌入应用程序扩展。他们能够提交到 App Store,但随后收到一封电子邮件: W
我有一个依赖的 watch 应用程序,可以在 Xcode 10.2.1 的模拟中正常工作,但是当我更新到 Xcode 11.x.x 时,传输数据似乎不再起作用。 在 Xcode 10.x.x 中,Wa
所以 - 经过大量的游戏 - 我找到了一种让它发挥作用的方法,但我有一个东西我不知道如何绕过(并且让我发疯......)。 我有一个 watch 应用程序,需要来自 GooglePlaces 的数据(
我是一名优秀的程序员,十分优秀!