Ios Apple Watch、WatchKit扩展和主要应用程序
有一个逻辑的主应用程序,我们将应用程序扩展到Apple Watch 添加目标xCode后,将创建另外两个应用程序:带代码的扩展和监视工具包应用程序Ios Apple Watch、WatchKit扩展和主要应用程序,ios,main,watchkit,Ios,Main,Watchkit,有一个逻辑的主应用程序,我们将应用程序扩展到Apple Watch 添加目标xCode后,将创建另外两个应用程序:带代码的扩展和监视工具包应用程序 问题:来自扩展的代码如何重用已经准备好的主iOS应用程序的逻辑?扩展应用程序如何与主应用程序通信并发送命令。在Apple Watch扩展程序的当前状态下: 您可以在iOS主应用程序和WatchKit扩展程序之间共享信息。使用应用程序组和NSUserDefaults访问共享信息对象 您无法执行iOS应用程序中的代码,该程序由Apple Watch上的
问题:来自扩展的代码如何重用已经准备好的主iOS应用程序的逻辑?扩展应用程序如何与主应用程序通信并发送命令。在Apple Watch扩展程序的当前状态下:
- 您可以在iOS主应用程序和WatchKit扩展程序之间共享信息。使用应用程序组和NSUserDefaults访问共享信息对象
- 您无法执行iOS应用程序中的代码,该程序由Apple Watch上的操作触发
openparentappentapplication
调用父应用程序。可以将值字典传递给父应用程序,父应用程序可以返回值字典
手表套件扩展:
// 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"])
})
// 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)
}
iOS应用程序:
// 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"])
})
// 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)
}
//在AppDelegate.swift中
func应用程序(应用程序:UIApplication!,handleWatchKitExtensionRequest用户信息:[NSObject:AnyObject]!,回复:(([NSObject:AnyObject]!)->Void)!){
//从Apple Watch检索到的参数
println(userInfo[“value1”])
println(userInfo[“value2”])
//将值传回Apple Watch
var retValues=Dictionary()
retValues[“retVal1”]=“返回测试1”
retValues[“retVal2”]=“返回测试2”
答复(返回值)
}
与您可以使用的iPhone应用程序通信
(BOOL)openParentApplication:(NSDictionary *)userInfo
reply:(void (^)(NSDictionary *replyInfo,
NSError *error))reply
在您的WKInterfaceController
来自苹果文档
使用此方法与您的iOS应用程序通信。使命感
该方法使iOS在后台启动应用程序(根据需要)
并调用应用程序:handleWatchKitExtensionRequest:reply
:方法
它的应用程序代理。该方法具有以下签名:
应用程序代理接收您传递到userInfo的字典
参数,并使用它来处理您提出的任何请求。如果是
提供应答,WatchKit执行您在中提供的块
此方法的reply参数
你的问题太宽泛了。请提出更具体的问题。根据文档,您将拥有一个在手机上运行的主应用程序、一个在手机上运行的应用程序扩展程序和一个watchkit捆绑包,这些都是传送到手表上以在手表上显示的资源。您的代码实际上都不是在手表上运行的。您只是向手表提供了一个资源包和数据。您可以使用应用程序组或。谢谢zisoft,有没有办法在memmory中的Extension和host App之间实现事件侦听器和触发器功能?我假设您正在考虑这样的问题:按下Apple watch上的按钮,然后在iPhone上启动操作。这需要保持iOS应用程序的运行,并对任何类型的信息进行轮询。到目前为止,我还没有找到这样做的方法。也许有时候,这是非常新的东西…我创建了Pull服务,它监视我们存储在NSUserDefaults中的值,如果它们发生了更改,就会通知侦听器。问题:似乎只有在应用程序启动、重新启动时才更改值。有什么想法吗?通过更新共享应用程序组容器中的文件,也可以在应用程序及其扩展名之间传递信息。然后,您可以在一个进程中写入文件,并在另一个进程中使用
NSFilePresenter
获取通知。有关如何使用后台模式(确保主应用有时间发送回复)的代码示例,请参阅“从Watch app调用父应用程序”()