swiftでの多次元配列のデータ保存、呼び出しについて
swift初心者です、現在既存のコードを編集し、わからない部分を調べつつswiftの学習をしています。
https://sites.google.com/a/gclue.jp/swift-docs/
こちらのサイトの「015 UIViewControllerで画面遷移する」のプログラムをベースに
http://swift-salaryman.com/nsuserdefaults.php
こちらのサイトのArrayの項目を参考にしFirstViewController
で保存した配列データをSecondViewController
のラベルに表示するというプログラムを作成しようとしたところ、outputLabel.text = arr[0][0]
の部分で
Type 'AnyObject!' has no subscript members
のエラーが出てきました。詳しい方ご教授お願いします。
import UIKit
var dictionary : [[String]] = [["0"],["1"]]
class FirstViewController: UIViewController,UITextFieldDelegate {
var saveField: UITextField!//saveField
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.grayColor() // 背景色をGreenに
// nextボタンの生成
let nextButton: UIButton = UIButton(frame: CGRectMake(0,0,120,50))
nextButton.backgroundColor = UIColor.redColor();
nextButton.layer.masksToBounds = true
nextButton.setTitle("Next", forState: .Normal)
nextButton.layer.cornerRadius = 20.0
nextButton.layer.position = CGPoint(x: self.view.bounds.width/2 , y:self.view.bounds.height-50)
//ボタンアクション
nextButton.addTarget(self, action: "onClickMyButton:", forControlEvents: .TouchUpInside)
//saveボタンの生成
let saveButton: UIButton = UIButton(frame: CGRectMake(0,0,100,25))
saveButton.backgroundColor = UIColor.redColor();
saveButton.layer.masksToBounds = true
saveButton.setTitle("保存", forState: .Normal)
saveButton.layer.cornerRadius = 3.0
saveButton.layer.position = CGPoint(x: (self.view.bounds.width/2)+70 , y:self.view.bounds.height-530)
//ボタンアクション
saveButton.addTarget(self, action: "onClickSaveButton:", forControlEvents: .TouchUpInside)
//saveFieldの作成
saveField = UITextField(frame: CGRectMake(0,0,250,30))
saveField.delegate = self // Delegateの設定
saveField.borderStyle = UITextBorderStyle.RoundedRect // 枠を表示する.
saveField.layer.position = CGPoint(x:self.view.bounds.width/2,y:100) //位置決め
// Viewに追加
self.view.addSubview(saveField)
self.view.addSubview(nextButton)
self.view.addSubview(saveButton)
}
//Nextボタン処理
internal func onClickMyButton(sender: UIButton){
let mySecondViewController: UIViewController = SecondViewController() // SecondViewControllerに遷移
mySecondViewController.modalTransitionStyle = UIModalTransitionStyle.CrossDissolve // アニメーション設定
self.presentViewController(mySecondViewController, animated: true, completion: nil) // Viewの移動
}
//saveボタン処理
func onClickSaveButton(sender: UIButton){
dictionary[0][0] = String(saveField.text) //現在の値をdictionaryに格納
NSUserDefaults.standardUserDefaults().setObject(dictionary, forKey:"dictionarySaveDate") //保存処理
NSUserDefaults.standardUserDefaults().synchronize() //書いたほうがいいらしい
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
////////////////////////////////// SecondViewController ////////////////////////////////////////////////////
class SecondViewController: UIViewController,UITextFieldDelegate {
override func viewDidLoad() {
//保存データの読み込み
let arr: AnyObject! = NSUserDefaults.standardUserDefaults().arrayForKey("dictionarySaveDate")
// 背景色を設定.
self.view.backgroundColor = UIColor.whiteColor()
// ボタンを作成.
let backButton: UIButton = UIButton(frame: CGRectMake(0,0,120,50))
backButton.backgroundColor = UIColor.redColor();
backButton.layer.masksToBounds = true
backButton.setTitle("Back", forState: .Normal)
backButton.layer.cornerRadius = 20.0
backButton.layer.position = CGPoint(x: self.view.bounds.width/2 , y:self.view.bounds.height-50)
//ボタンアクション
backButton.addTarget(self, action: "onClickMyButton:", forControlEvents: .TouchUpInside)
self.view.addSubview(backButton)
// ラベル作成
let outputLabel: UILabel = UILabel(frame: CGRectMake(0,0,200,50))
outputLabel.backgroundColor = UIColor.orangeColor()
outputLabel.layer.masksToBounds = true
outputLabel.layer.cornerRadius = 20.0
outputLabel.text = arr[0][0] //ERROR Type 'AnyObject!' has no subscript members
outputLabel.textColor = UIColor.whiteColor()
outputLabel.textAlignment = NSTextAlignment.Center
outputLabel.layer.position = CGPoint(x: self.view.bounds.width/2,y: 200)
self.view.addSubview(outputLabel)
}
internal func onClickMyButton(sender: UIButton){
let myViewController: UIViewController = FirstViewController() // 遷移するViewを定義
myViewController.modalTransitionStyle = UIModalTransitionStyle.FlipHorizontal // アニメーションを設定
self.presentViewController(myViewController, animated: true, completion: nil) // Viewの移動
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}