使用interface controller里的init和awakeWithContext:方法来导入需要的数据、为页面上的对象设置值以及准备要显示的页面。不要使用willActivate来初始化interface controller。willActivate方法只是在页面显示之前短暂的调用一下,所以这个方法可以用来做一些短暂的改变。例如:你可能使用这个方法开启一个动画或开始其他的任务当你的页面在屏幕上时。(注意:glance interfaces不支持动作方法。点击你的app的glance interface通常会加载这个app)
你的WatchKit extension仅仅当使用者在交互你的app时才会保持运行。
WKInterfaceController的几个关键方法
init 第一次初始化interface controller
awakeWithContext: 渲染页面,主要初始化的地方
willActivate 页面需要小的变动可以在这里解决(每次显示前都会调用这个方法),但页面初始化的主战场还是在init和awakeWithContext:方法上
didDeactivate 结束时调用,可以用来销毁时间对象和停止动画等
在模拟器上调试的时候,可以使用Hardware > Lock command to lock the simulator(相当于锁屏),WatchKit调用didDeactivate方法。然后解屏(就是对iPhone 模拟器解屏,不是iWatch哦)的话,WatchKit会调用willActivate。
WatchKit App和iOS App共享数据
如果你的iOS app 和 WatchKit extension依赖同一数据,可以使用共享的app文件夹来存储数据。WatchKit extension和iOS app运行在单独的沙盒环境,所以要通过共享的app文件夹来共享数据。
选择这个项目->TARGETS->xxx(iOS app)->Capabilities,首先先打开,然后。。。(估计是添加共享目录,接下来我也不清楚了,因为需要是Apple Developer)
接着同理选择这个项目->TARGETS->xxxWatchKit Extension(WatchKit Extension)->Capabilities,首先先打开,然后。。。(估计是添加共享目录,接下来我也不清楚了,因为需要是Apple Developer)
以上的步骤应该是设置一个共享的目录即iOS app和WatchKit Extension都可以访问的目录,这样就可以达到共享数据的目的。在运行的时候,通过NSFileManager的containerURLForSecurityApplicationGroupIdentifier:方法来创建或访问共享的文件。
要想在两个targets之间共享偏好数据,可以创建一个NSUserDefaults对象使用共享的文件夹的identifier。用NSUserDefaults的initWithSuiteName:方法创建一个对象作为两个targets的共用数据的接口。