AppleWatch - 调用WKInterfaceDevice addCachedImage时“尝试插入nil”

时间:2015-06-10 02:19:46

标签: ios swift watchkit

调用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"])
}

1 个答案:

答案 0 :(得分:1)

我得到的确切错误可能是Apple的错误,但我认为我的问题的答案是WKInterfaceDevice的addCachedImage不应该从iPhone应用程序调用,而是从WatchKit Extension调用。在iPhone app和WatchKit Extension之间我必须使用共享容器来保存然后加载图像,然后扩展可以调用addCachedImage。