27173


現在swiftでAppDelegateで宣言したNSMutableArrayの要素を別画面で保存・取得したいと思っています。  
（AppDelegateで宣言・初期化→A画面で保存→B画面で取り出し）

しかし、B画面で取得する時に

[code]

    fatal error: unexpectedly found nil while unwrapping an Optional value
    
[/code]

のエラーで止まってしまいます。  
ソースコードはこちらになります。

AppDelegate

[code]

    var answerArray:NSMutableArray?
    
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions:
     [NSObject: AnyObject]?) -> Bool {
    
            let answerArray = [0,0,0,0,0,0]
            print(answerArray)//[0,0,0,0,0,0]
    }
    
[/code]

aViewController

[code]

    var answerArray:NSMutableArray?
    
    override func viewDidLoad() {
    
                //bボタン
                q1_1btn = UIButton()
                q1_1btn.frame = CGRectMake(200,50,60,60)
                q1_1btn.setTitle("ボタンA", forState: UIControlState.Normal)
                q1_1btn.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
                q1_1btn.tag = 1
                q1_1btn.addTarget(self, action: #selector(QuestionViewController.selectbtn(_:)), forControlEvents: .TouchUpInside)
                self.view.addSubview(q1_1btn)
    }
    internal func selectbtn(sender: UIButton){
             print("sender.tag:\(sender.tag)") //1
             let appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
             //押したボタンのタグをarrayに格納
             let tag = sender.tag
             appDelegate.answerArray![0] = tag
                             let secondViewController = bViewController()
                             self.navigationController?.pushViewController(secondViewController, animated: true)
    }
    
[/code]

bViewController

[code]

    var str:NSArray?
    
    override func viewDidLoad() {
    
                self.view.backgroundColor = UIColor.whiteColor();
                let appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    
                let num:Int = appDelegate.answerArray![0] as!Int //ここでfatal error
                print(appDelegate.answerArray) //nilと返されます
    
    }
    
[/code]


CC BY-SA 3.0
2016-06-29T02:42:14.563
27164
2016-06-29T05:45:00.510
2016-06-29T02:46:35.290
76
12886
question
swift ios swift2
Arrayから要素を取得する際にエラーが出てしまいます


`answerArray`という同名のローカル変数を宣言（シャドーイング）しているため、`AppDelegate`の`answerArray`は`nil`のままのためです。

`nil`をアンラップした結果、エラーとなる動作はSwiftの仕様通りです。

[code]

    var answerArray:NSMutableArray?
    
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions:
     [NSObject: AnyObject]?) -> Bool {
    
            // selfは必須ではないですが、明示のために    
            self.answerArray = [0,0,0,0,0,0]
            print(answerArray)//[0,0,0,0,0,0]
    }
    
[/code]


CC BY-SA 3.0
2016-06-29T05:45:00.510
27173
2016-06-29T05:45:00.510
5337
27164
answer