繁体   English   中英

Apple Watch、WatchKit 扩展和主要应用程序

[英]Apple Watch, WatchKit Extension and main application

有带有逻辑的主要应用程序,我们将应用程序扩展到 Apple Watch。

添加目标 xCode 后,创建了另外 2 个应用程序:代码扩展和手表套件应用程序。

问题:扩展中的代码如何重用准备好的和已经制作的主 iOS 应用程序的逻辑? 扩展应用程序如何与主应用程序通信并发送命令。

要与包含的 iPhone 应用程序通信,您可以使用

(BOOL)openParentApplication:(NSDictionary *)userInfo
                        reply:(void (^)(NSDictionary *replyInfo,
                                        NSError *error))reply

在你的WKInterfaceController

来自 Apple 文档

使用此方法与包含的 iOS 应用程序进行通信。 调用该方法会导致 iOS 在后台启动应用程序(根据需要)并调用application:handleWatchKitExtensionRequest:reply : 其应用程序委托的方法。 该方法具有以下签名:

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo
reply:(void(^)(NSDictionary *replyInfo))reply

应用程序委托接收您传递给 userInfo 参数的字典,并使用它来处理您提出的任何请求。 如果它提供回复,WatchKit 会执行您在此方法的回复参数中提供的块。

在 Apple Watch Extension 的当前状态下:

  • 您可以在 iOS 主应用程序和 WatchKit 扩展程序之间共享信息。 使用 App Groups 和 NSUserDefaults 访问共享信息对象。

  • 无法从 Apple Watch 上的操作触发的 iOS 应用程序中执行代码。

至少现在还没有。

编辑:从 Xcode 6.2 Beta 2 开始

现在可以从 Apple Watch 与父 iOS 应用程序通信。

在 WatchKit 扩展中,通过openParentAppentApplicion调用父应用程序。 可以将值字典传递给父应用程序,父应用程序可以返回值字典。

Watchkit 扩展:

// Call the parent application from Apple Watch

// values to pass
let parentValues = [
    "value1" : "Test 1",
    "value2" : "Test 2"
]

WKInterfaceController.openParentApplication(parentValues, reply: { (replyValues, error) -> Void in
    println(replyValues["retVal1"])
    println(replyVaiues["retVal2"])
})

iOS应用程序:

// in AppDelegate.swift
func application(application: UIApplication!, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]!, reply: (([NSObject : AnyObject]!) -> Void)!) {
    // retrieved parameters from Apple Watch
    println(userInfo["value1"])
    println(userInfo["value2"])

    // pass back values to Apple Watch
    var retValues = Dictionary<String,String>()

    retValues["retVal1"] = "return Test 1"
    retValues["retVal2"] = "return Test 2"

    reply(retValues)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM