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

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

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

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

1834閲覧

SpriteNodeの入った配列をNSUserDefaultsに保存したいです

yoshi1023

総合スコア10

SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/09/07 07:23

###前提・実現したいこと
初めまして。swiftのSpritekitで簡単なゲームを作っているものです。
SpriteNodeを配列に保存し、その配列をappDelegateのNSUserDefaultsに保存して
取り出すということをしたいのですがエラーが出てしまいます。
どなたかご教授いただけませんでしょうか?
よろしくお願いいたします。

###該当のソースコード

import SpriteKit class GameScene:SKScene { var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate let ud = NSUserDefaults.standardUserDefaults() var array:[SKSpriteNode] = [] override func didMoveToView(view: SKView) { self.backgroundColor = UIColor.blackColor() node() print(appDelegate.array1) } override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { } func node() { let node1 = SKSpriteNode(color: UIColor.blueColor(), size: CGSize(width: 100, height: 100)) node1.name = "1" self.addChild(node1) array.append(node1) let node2 = SKSpriteNode(color: UIColor.blueColor(), size: CGSize(width: 100, height: 100)) node2.name = "2" self.addChild(node2) array.append(node2) let node3 = SKSpriteNode(color: UIColor.blueColor(), size: CGSize(width: 100, height: 100)) node3.name = "3" self.addChild(node3) array.append(node3) ud.setObject(array, forKey: "spriteArray") ud.synchronize() } }
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? var array1 = [] func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { array1 = NSUserDefaults.standardUserDefaults().arrayForKey("spriteArray")! return true }

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

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

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

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

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

guest

回答1

0

ベストアンサー

node()

SKSpriteNode(を含むArray)は、そのままではUserDefaultsに保存できませんので、一旦NSDataに変換してから保存します。

swift

1//Arrayを丸ごとNSData化して 2let data = NSKeyedArchiver.archivedDataWithRootObject(array) 3//保存 4ud.setObject(data, forKey: "spriteArray")

didFinishLaunchingWithOptions

取り出すときはNSDataをArrayに戻します。

swift

1//NSDataを取り出して 2if let data = NSUserDefaults.standardUserDefaults().dataForKey("spriteArray") { 3 //"spriteArray"が存在するとき 4 //Arrayに戻す 5 let array1 = NSKeyedUnarchiver.unarchiveObjectWithData(data) 6 print(array1) 7} else { 8 //"spriteArray"が存在しないとき 9 print("does not exist 'spriteArray'.") 10}

投稿2016/09/09 07:16

fuzzball

総合スコア16731

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

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

yoshi1023

2016/09/09 12:13

おかげさまで無事に保存と取り出し出来ました。 すごくわかりやすく教えていただきまして大変勉強になりました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問