swiftでの画面移動の際の呼び出し
解決済
回答 2
投稿
- 評価
- クリップ 1
- VIEW 1,420
swiftで画面移動する際にAppDekegateに数値を保管して
移動先でそれを扱い表示するというものを組んでいるのですが
1回目の移動ではnilになってしまい一度移動元に戻り再度移動すると
先ほどアクセスしたデータが表示されます。
例としては
1回目:A(移動元)→B(移動先) この時データはnil
2回目:一回目→A(移動元)→B(移動先) こうすると一回目のデータ
を表示してしまいます。
どうすればいいでしょうか?
//移動元cell選択した時の処理
func tableView(table: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
selected_num = indexPath.row
let appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.img = send_pic[selected_num]
appDelegate.tit = send_title[selected_num]
appDelegate.address = rest[selected_num].objectForKey("address") as? String
appDelegate.tel = rest[selected_num].objectForKey("tel") as? String
appDelegate.time = rest[selected_num].objectForKey("opentime") as? String
}
//移動先boardで戻るボタンを設置してあります
class status: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
img_view.image = appDelegate.img
img_view.contentMode = UIViewContentMode.ScaleAspectFit
title_view.text = appDelegate.tit
time_view.text = appDelegate.time
tel_view.text = appDelegate.tel
address_view.text = appDelegate.address
print(appDelegate.time)
print(appDelegate.tel)
print(appDelegate.address)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
各画面のデータ渡しを全てAppDelegateにプロパティを持たせて行うのは無理がくると思います。
説明を全て記述できませんが、DataModelのようなクラスを使用して受け渡しするのが良いと思います。
データモデルクラス
// DataModelクラス
class DataModel: NSObject {
var img: UIImage!
var title: String!
var address: String?
var tel: String?
var time: String?
}
遷移前画面
import UIKit
class ViewController: UIViewController {
// DataModelの配列
var dataModel: [DataModel] = []
override func viewDidLoad() {
super.viewDidLoad()
}
func tableView(table: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// dataModel配列の中で押下されたセルのデータを遷移先に渡す
// identifireはStoryboardで設定
performSegueWithIdentifier("identifire", sender: dataModel[indexPath.row])
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// 遷移先オブジェクトを取得してプロパティにdataModelを設定
guard let nextViewController = segue.destinationViewController as? NextViewController else { return }
nextViewController.dataModel = sender as! DataModel
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
遷移先画面
import UIKit
class NextViewController: UIViewController {
// 遷移前画面からデータをセット
var dataModel: DataModel!
@IBOutlet weak var img_view: UIImageView!
@IBOutlet weak var title_view: UILabel!
@IBOutlet weak var time_view: UILabel!
@IBOutlet weak var tel_view: UILabel!
@IBOutlet weak var address_view: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// dataModelから各データをプロパティに設定
img_view.image = dataModel.img
img_view.contentMode = UIViewContentMode.ScaleAspectFit
title_view.text = dataModel.title
time_view.text = dataModel.time ?? ""
tel_view.text = dataModel.tel ?? ""
address_view.text = dataModel.address ?? ""
}
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
既に試していたら申し訳ないですが、viewDidLoadのほうがtableViewのメソッドより先に呼ばれていないでしょうか?
ブレイクポイントを両方にうって実行した際に、viewDidLoadが先にヒットしませんか。
実は私も似たようなことではまったことがありましたので。。。
既に試した結果の投稿でしたら失礼しました。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.38%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる