Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

はじめに

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()
    }
}

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

arthur87
iwate-pu
岩手県滝沢市にある公立大学です。Qiitaではソフトウェア情報学部生や出身の人が多いです。
https://www.iwate-pu.ac.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away