2017-08-24 11 views
0

私は2つのビューコントローラを持つtabbarcontrollerを持っています。私のtabbarcontrollerクラスでは配列tasks = [Task]()(各ビューコントローラで同じ)があります。タスクは、ドキュメントディレクトリからNSKeyedUnarchiverでロードされます。TabBarController:配列からの追加/削除

tasks = (tabBarController as! TabBarController).tasksの各ビューコントローラでそのタスクを取得します。

各ビューコントローラでは、タスクのプロパティを変更できますが、タスクをビューコントローラ1に追加したりビューコントローラ2で削除することはできません。

プロパティを変更した後で、(各ビューコントローラで)タスクを保存します。

タスクを追加/削除するにはどうすればよいですか?

ありがとうございました。

答えて

0

アレイはSwiftの値の型ですので、を変更するとtabBarController.tasksのコピーが変更されます。その後、tabBarController.tasksを保存すると、元の変更されていない配列が保存されます。あなたのtasks配列が(私はTaskオブジェクトと呼んでます)、これはというClassのインスタンスを意味している

あなたが

var tabBarController = tabBarController as! TabBarController 
tabBarController.tasks.append(newTask) 

おそらくオブジェクト内部タブバーコントローラに直接tasks配列を更新する必要があります彼ら参照型です。 tasks配列とtabBarController.tasks配列の両方が同じTaskオブジェクトへの参照を保持するため、Taskプロパティを単純に変更すると、そのオブジェクトにアクセスするために使用した配列に関係なく、そのオブジェクトの同じインスタンスが変更されます。

このため、プロパティの変更は保存されますが、追加/削除は行われません。

+0

ok。私はそれを試してみましょうが、なぜそれがプロパティの値を保存するのですか? tabbarcontrollerでは、タスクを1回ロードし、プロパティをビューコントローラのコピーに保存しました。プロパティはすべて正常に動作します。追加/削除は機能しません。 – EmKay

+0

これを説明するための更新を見る – Paulw11

+0

ありがとう。今私は理解している。 – EmKay

関連する問題