SwiftをはじめようとAppleのチュートリアルに沿ってサンプルアプリを作っていた時に生じたエラーです。
チュートリアル
「FoodTracker」というサンプルアプリを作りながら、SwiftとXcodeについて学んでいくことができます。
エラー
上記チュートリアルを順調に進めていき、最後の最後、「Persist Data」のレッスンで以下のエラーに遭遇しました。
Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: '*** -[NSKeyedUnarchiver decodeInt64ForKey:]: value for key (rating) is not an integer number'
このレッスンでは、アプリ内で追加・編集・削除した料理のデータ(料理名・画像・料理の評点)をファイルに保存できるようにするレッスンです。
問題の箇所は、Meal.swiftの以下の箇所です。
Meal.swift
let rating = aDecoder.decodeIntegerForKey(PropertyKey.ratingKey)
上記コードでも問題なくコンパイルされ、アプリも動作していました。
しかし、データ保存が可能になるということで、一度アプリを落として再度立ち上げた時にエラーが生じました。
保存したデータの読み込み時になにやら起こったようです。
解決方法
以下URLの通りです
Meal.swift
// let rating = aDecoder.decodeIntegerForKey(PropertyKey.ratingKey)
let rating = aDecoder.decodeObjectForKey(PropertyKey.ratingKey) as! Int
decodeIntegerForKey
ではなく、decodeObjectForKey
を使用して、Int
にダウンキャストします。
参考
- https://developer.apple.com/library/prerelease/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson10.html#//apple_ref/doc/uid/TP40015214-CH14-SW1
- http://stackoverflow.com/questions/31086593/xcode-nsinvalidunarchiveoperationexception-when-try-unarchive-file
iOSもはじめたばかりですが、頑張っていきます