我正在尝试向我的Watchkit扩展发送"类",但是我收到此错误.
*由于未捕获的异常'NSInvalidUnarchiveOperationException'终止应用程序,原因:'* - [NSKeyedUnarchiver decodeObjectForKey:]:无法解码类的对象(MyApp.Person)
存档和取消存档在iOS应用程序上运行良好,但在与watchkit扩展程序通信时无效.怎么了?
InterfaceController.swift
let userInfo = ["method":"getData"]
WKInterfaceController.openParentApplication(userInfo,
reply: { (userInfo:[NSObject : AnyObject]!, error: NSError!) -> Void in
println(userInfo["data"]) // prints <62706c69 7374303...
if let data = userInfo["data"] as? NSData {
if let person = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? Person {
println(person.name)
}
}
})
Run Code Online (Sandbox Code Playgroud)
AppDelegate.swift
func application(application: UIApplication!, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]!,
reply: (([NSObject : AnyObject]!) -> Void)!) {
var bob = Person()
bob.name = "Bob"
bob.age = 25
reply(["data" : NSKeyedArchiver.archivedDataWithRootObject(bob)])
return
}
Run Code Online (Sandbox Code Playgroud)
Person.swift
class …Run Code Online (Sandbox Code Playgroud) 我想为Apple手表制作一个测试应用程序,您可以在手机上设置一些String,然后它将显示在Apple Watch上.我决定使用NSUserDefaults类来存储这些数据.
在我的iPhone视图控制器中,我有一个方法,它将输入和存储带入本地存储:
- (IBAction)saveInfo:(id)sender {
NSString *userInput = [myTextField text];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:userInput forKey:@"savedUserInput"];
[defaults synchronize];
self.myLabel.text = [defaults stringForKey:@"savedUserInput"];
}
Run Code Online (Sandbox Code Playgroud)
在我的监视接口控制器中,我有一个检索数据并显示它的方法:
- (IBAction)showText2 {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults synchronize];
self.myLabel2.text = [defaults stringForKey:@"savedUserInput"];
}
Run Code Online (Sandbox Code Playgroud)
除了某些原因,我试图检索的数据显示为null,标签没有更新.
Watchkit应用程序和扩展的版本和内部版本号(或版本和简短版本)必须设置为与包含应用程序相同的值.
我使用环境变量Info.plist在构建时动态设置应用程序版本.这也适用于Watchkit扩展,但不适用于Watchkit应用程序.
我使用的环境变量必须在主应用和扩展的plist中提供${}(对于${VERSION}我设置的变量VERSION).
如果我为Watchkit应用程序执行相同的操作,它将获取字符串本身,而不是值.如果我提供美元和括号,变量中没有数据.
知道如何设置Watchkit应用程序的变量吗?
使用Watch OS 2.0开发人员应该被允许访问心跳传感器....我很想玩它并为我的想法构建一个简单的原型,但我无法找到关于任何地方的信息或文档此功能.
谁能指出我如何处理这项任务?任何链接或信息将不胜感激
对于iOS应用程序,UI更新是专门从主线程完成的 - 不会这样做从不推荐,并且可能导致意外行为.
在watchOS中,操作系统的结构是手表扩展和应用程序 - 作为不同的"容器".通常,从扩展程序调用UI更新,这些更新在应用程序的容器中更新.
相同的主线程逻辑是否适用于从watch扩展更新UI,还是可以从后台调用UI更新?
编辑 - 带来一些清晰度.从应用程序的容器中,UI更新可能应该发生在主线程上(如大多数系统/操作系统中所发生的那样,如下所述).问题是watchOS是否为我们处理,即是否在扩展的后台线程上调用UI更新将自动发布到应用程序容器的主线程中.
我刚刚安装了最新的Xcode测试版来试用Swift 2以及Apple Watch开发部分的改进.
我实际上很难搞清楚为什么这种NSUserDefaults在iOS和Watch OS2之间共享信息的基本方法无法正常工作.
我按照这个循序渐进的教程来检查我是否错过了这个过程中的某些内容,比如打开手机应用程序和扩展程序的同一组,但这就是我得到的:没有.
这是我在iPhone应用程序中为ViewController编写的内容:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var lb_testo: UITextField!
let shared_defaults:NSUserDefaults = NSUserDefaults(suiteName: "group.saracanducci.test")!
var name_data:NSString? = ""
override func viewDidLoad() {
super.viewDidLoad()
name_data = shared_defaults.stringForKey("shared")
lb_testo.text = name_data as? String
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func upgrade_name(sender: AnyObject) {
name_data = lb_testo.text
shared_defaults.setObject(name_data, forKey: "shared")
lb_testo.resignFirstResponder()
shared_defaults.synchronize()
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我在WatchKit的InterfaceController中所拥有的:
import WatchKit
import …Run Code Online (Sandbox Code Playgroud) 在Watch Extension运行时是否可以振动手表?我们可以通过这种方式在iOS上实现它(迫使iPhone振动):
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
Run Code Online (Sandbox Code Playgroud)
我希望WatchKit上有类似的东西.
更新:我已向Apple雷达添加了问题,并收到了答案:
Engineering已确定您的错误报告(20019274)与另一个问题(19025053)重复,并将被关闭.
19025053仍然开放.
更新2: AudioServicesPlayAlertSound()不使用任何声音ID的手表模拟器.似乎不支持函数.
我刚刚下载了Xcode 6 GM,我想看看我的应用程序如何与连接到模拟iPhone的Apple Watch一起使用.
如何在MacBook上模拟这个新设备?
有没有办法在Apple Watch中通知用户iPhone现在已经超出范围,何时返回范围.我们怎样才能在手表延伸中做到这一点.
提前致谢.
我正在尝试向我的应用程序提交更新以包含Apple Watch功能,但是每当我验证构建时,我都会在下面的屏幕截图中详细说明错误.查看底部错误我的文件名似乎与模式匹配,所以我看不出问题所在.如果我能够获得1个图标的模式,那么我可以在整个板上应用相同的逻辑,但是我没有太多运气.
其他人遇到过这个问题吗?

watchkit ×10
ios ×7
apple-watch ×6
objective-c ×3
swift ×3
xcode ×3
watchos-2 ×2
watchos ×1
xcode6 ×1