LoginSignup
2
1

More than 5 years have passed since last update.

watchOS 2の実機でNSDataがエラーになる

Posted at

はじめに

StoryboardにWKInterfaceImageを配置して、指定したURLの画像を表示します。

Storyboard WKInterfaceImage

コードは以下のとおりです。

InterfaceController.swift
import WatchKit
import Foundation

class InterfaceController: WKInterfaceController {
    @IBOutlet var image: WKInterfaceImage!
    override func awakeWithContext(context: AnyObject?) {
        super.awakeWithContext(context)

        let url = NSURL(string: "https://YOUR_IMAGE_FILE")!
        let data = NSData(contentsOfURL: url)
        self.image.setImage(UIImage(data: data!))        
    }

    override func willActivate() {
        super.willActivate()
    }

    override func didDeactivate() {
        super.didDeactivate()
    }
}

シミュレータで実行すると画像が表示されます。
シミュレータのバージョンはVersion 2.0 (SimulatorApp-621 CoreSimulator-179です。

シミュレータ実行結果

実機で実行するとNSDataの箇所でなエラーになります。
実機のバージョンはwatchOS 2.0(13S344)です。

fatal error: unexpectedly found nil while unwrapping an Optional value

NSURLSessionで書き換える

NSDataのメソッドにバグがあるようです。
watchOS 2 on device doesn't read NSData

NSDataをNSURLSessionで書き換えます。

InterfaceController.swift
import WatchKit
import Foundation


class InterfaceController: WKInterfaceController {

    @IBOutlet var image: WKInterfaceImage!
    override func awakeWithContext(context: AnyObject?) {
        super.awakeWithContext(context)

        let url = NSURL(string: "https://YOUR_IMAGE_FILE")!
        let task = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: {data, response, error in
            self.image.setImage(UIImage(data: data!))
        })
        task.resume()
    }

    override func willActivate() {
        super.willActivate()
    }

    override func didDeactivate() {
        super.didDeactivate()
    }
}

実行するとシミュレータでも実機でも画像が表示されます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1