调用WKInterfaceDevice addCachedImage(_:name :)将图像从我的iPhone应用程序发送到Apple Watch(扩展程序可以告诉图像视图显示它)崩溃。例外是:
2015-06-09 20:47:57.079 TimeInterval[20195:5186462] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[3]'
各种Google和StackOverflow搜索显示,这与使用快捷方式创建不允许传入nil
的NSDictionary有关。但是,我的代码根本没有制作字典。此外,当调试器中断(异常断点)时,我验证我传递的UIImage和NSString名称都不是nil。
有没有人见过这个?知道为什么会发生或如何解决它?有没有人真正使用addCachedImage成功? (考虑AppleWatch的新功能,谁知道!)
我的一大堆代码,如果它有帮助:
func application(application: UIApplication, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]?, reply: (([NSObject : AnyObject]!) -> Void)!) {
if let info = userInfo {
NSLog("watch kit request: %@", info)
if let element = info["element"] as? String {
//Request to render an element
if element == "timer" {
let timerView = NPProgressLabel(size: CGSizeMake(48, 48))
timerView.text = info["value"] as! String
timerView.progressPercent = (info["progress"] as! NSNumber).floatValue
timerView.render()
let device = WKInterfaceDevice.currentDevice()
var success = false
if let image = timerView.currentImage {
success = device.addCachedImage(image, name: timerView.currentImageName()) // <------- crashing here ----------
} else {
NSLog("no image");
}
if !success {
NSLog("failed")
} else {
NSLog("addCachedImage success")
}
reply(["imageName": timerView.currentImageName()])
} else {
reply(["error": "Unknown element"])
}
return
}
}
reply(["error": "Bad request"])
}
答案 0 :(得分:1)
我得到的确切错误可能是Apple的错误,但我认为我的问题的答案是WKInterfaceDevice的addCachedImage不应该从iPhone应用程序调用,而是从WatchKit Extension调用。在iPhone app和WatchKit Extension之间我必须使用共享容器来保存然后加载图像,然后扩展可以调用addCachedImage。