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?

【Swift】Swift のチュートリアルでエラー (Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: '*** -[NSKeyedUnarchiver decodeInt64ForKey:]: value for key (rating) is not an integer number')

More than 5 years have passed since last update.

SwiftをはじめようとAppleのチュートリアルに沿ってサンプルアプリを作っていた時に生じたエラーです。

チュートリアル

https://developer.apple.com/library/prerelease/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson2.html#//apple_ref/doc/uid/TP40015214-CH5-SW1

「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の通りです :grinning:

http://stackoverflow.com/questions/31086593/xcode-nsinvalidunarchiveoperationexception-when-try-unarchive-file

Meal.swift
// let rating = aDecoder.decodeIntegerForKey(PropertyKey.ratingKey)

let rating = aDecoder.decodeObjectForKey(PropertyKey.ratingKey) as! Int

decodeIntegerForKeyではなく、decodeObjectForKeyを使用して、Intにダウンキャストします。

参考

iOSもはじめたばかりですが、頑張っていきます :fist:

taji-taji
植物系エンジニア。 こんなiOSアプリ作りました。 「観察日記」 https://appsto.re/jp/kHAx_.i 「My Closet」 https://appsto.re/jp/OBRIcb.i
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