質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1927閲覧

iOS12から推奨されるNSKeyedUnarchiver.unarchivedObjectの使い方が分からない

tarofess

総合スコア127

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/12/14 02:10

編集2018/12/14 03:43

現在画面がタッチされれば画面にパーティクルが現れるような処理を書いているのですが、NSKeyedUnarchiver.unarchivedObjectでエラーが出てしまいます。
エラー内容はこういったものです。

Error Domain=NSCocoaErrorDomain Code=4864 "value for key 'NS.objects' was of unexpected class 'NSColor'. Allowed classes are '{( SKEmitterNode, NSNumber, NSValue, NSMutableArray, NSArray, NSMutableDictionary, NSString, NSDictionary )}'

unarchivedObjectのofClassをofClassesに変えて、その引数にNSColorを追加すればいいのかなと思ったのですが、NSColorが見当たりません。
エラー内容もイマイチ理解できていないので、どう対処すればいいかが分かりません。
コードは以下のようになっています。

swift

1for touch: AnyObject in touches { 2 let location = touch.location(in: self) 3 guard let path = Bundle.main.path(forResource: "IPParticle", ofType: "sks") else { return } 4 let url = URL(fileURLWithPath: path) 5 guard let data = try? Data(contentsOf: url) else { return } 6 7 do { 8 let particle = try NSKeyedUnarchiver.unarchivedObject(ofClass: SKEmitterNode.self, from: data) 9 particle!.position = location 10 particle!.numParticlesToEmit = 100 // 何個、粒を出すか。 11 particle!.particleBirthRate = 200 // 一秒間に何個、粒を出すか。 12 particle!.particleSpeed = 80 // 粒の速度 13 self.addChild(particle!) 14 } catch let error { 15 print(error) 16 } 17 18 }

デバッグの時に確認したのですが、dataインスタンスには値は入っていました。
そして、NSKeyedUnarchiver.unarchivedObjectの行でエラーが出てcatchに飛びます。
どうすればパーティクルを表示できるようになるでしょうか?
どなたか分かる方がいれば教えていただきたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MasakiHori

2018/12/14 11:16

if let particle = SKEmitterNode(fileNamed: "IPParticle") { ... } でいいのでは?
tarofess

2018/12/15 02:42

ご提示の方法でやりたいことが実現できました。 ありがとうございました。
guest

回答1

0

自己解決

if let particle = SKEmitterNode(fileNamed: "IPParticle") { ... }
でやりたいことが実現できました。
回答くださった方、ありがとうございました。

投稿2018/12/15 02:42

tarofess

総合スコア127

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問