添加Watchkit扩展并让iPhone完成工作

时间:2018-01-31 11:13:59

标签: ios iphone swift watchkit watchconnectivity

我需要使用iPhone应用程序并实现Watchkit扩展。现在有了这样的事情:真的有很多类,特别是那些负责网络通信(认证令牌等)的类。现在构建应用程序的人正在做的事情就像在网络通信中显示UIAlert一样:

class func showReloadDataDialog(_ action: @escaping (_ action: UIAlertAction) -> Void) {
    let alert = UIAlertController.init(title: String.localizedString("AlertTitleError", ""),
                                       message: String.localizedString("ActivationRetrySupportedNetworksLoadMessage", ""),
                                       preferredStyle: .alert)
    let defaultAction = UIAlertAction.init(title: String.localizedString("AlertNoButton", ""), style: .default, handler: nil)
    alert.addAction(defaultAction)
    let reloadAction = UIAlertAction.init(title: String.localizedString("AlertYesButton", ""), style: .default, handler: action)
    alert.addAction(reloadAction)
    self.present(alert)
}

这里是present()功能:

// MARK: Present
class func present(_ alert: UIAlertController) {
    if let window = UIApplication.shared.delegate?.window, var topController = window!.rootViewController {
        while topController.presentedViewController != nil {
            topController = topController.presentedViewController!
        }
        if let navigationController = topController as? UINavigationController {
            topController = navigationController.visibleViewController!
        }
        if topController is UIAlertController {
            return
        }
        topController.present(alert, animated: true, completion: nil)
    }
}

正如您所看到的,他们做的事情与应该做的有点不同。现在这确实是一个问题,因为我不能在我的Watchkit扩展中使用这个网络通信类,因为Apple的Watchkit中没有UIViewController - 这意味着当我添加它时它不会编译我的手表目标。

这只是一个例子,还有很多其他的东西,我真的不想重构整个来源。

现在我的问题是:我可以以某种方式让iPhone完成所有工作(例如,在处理所有身份验证令牌时从服务器获取一些数据)然后将结果推送到Watchkit扩展吗?我已经阅读了有关WCSession的一些内容 - 我可以将此用于我的案例吗?我基本上试图在WKInterfaceMap上显示一些POI。

1 个答案:

答案 0 :(得分:1)

关于您的第一个问题,您将在watchkit中找到有关Web服务的解决方案here。在社区推荐的链接中,让iPhone应用程序进行繁重的工作(获取数据等),然后将信息返回给watchApp。

其次,您可以使用watchconnectivity框架,也可以使用MMWormhole与iPhone App进行通信。您需要做的就是获取兴趣点数据并将其发送到您的watchApp。从那里你可以填充你的地图。