前提・実現したいこと
ゲームを作成しています
自分の持っているアイテムをTableViewに表示させるプログラムを書いたのですが、前までcellが表示されていたのに、急に表示されなくなってしまいました...
該当のソースコード
Swift
1import UIKit 2 3class ViewControllerBag: UIViewController, UITableViewDelegate, UITableViewDataSource { 4 @IBOutlet weak var DBTableView: UITableView! 5 6 var dbCells = [String]() 7 var dbImageArray: [String] = ["Thunder","Speed5","Speed10","Speed15","Invisible5","Invisible10","Invisible15","ATKRise","Shield","Electrical","BallSpeed"] 8 var dbTitleArray: [String] = ["カミナリ","瞬足5","瞬足10","瞬足15","透明5","透明10","透明15","攻撃力上昇","防御","鈍足のカミナリ","豪速球"] 9 var dbLetterArray: [String] = ["ランダムで、敵のライフを1減らす","5秒間、足が速くなる","10秒間、足が速くなる","15秒間、足が速くなる","5秒間、透明になる","10秒間、透明になる","15秒間、透明になる","一回だけボールの攻撃力がUP","一回だけボールを防げる","ランダムで、敵の足を遅くする","一回だけボールのスピードがUP"] 10 var arrayNum = 0 11 var count = 1 12 var deathblowNameArrayUD = UserDefaults.standard 13 //var dbArrayEmptyUD = UserDefaults.standard 14 var cellIndex = "" 15 var dbNum = 0 16 var dbNameUD = [String]() 17 18 override func viewDidLoad() { 19 super.viewDidLoad() 20 DBTableView.delegate = self 21 DBTableView.dataSource = self 22 DBTableView.register(UINib(nibName: "CustomTableViewCell", bundle: nil), forCellReuseIdentifier: "CustomCell") 23 24 } 25 26 // View構築後の処理 27 override func viewDidAppear(_ animated: Bool) { 28 super.viewDidAppear(animated) 29 dbCells = (deathblowNameArrayUD.array(forKey: "DeathBlowArray") as? [String]) ?? [] 30 if dbCells.isEmpty == true { 31 debugPrint("空") 32 noItemAlert() 33 }else { 34 debugPrint("空ではない") 35 print(dbCells) 36 } 37 } 38 39 func numberOfSections(in tableView: UITableView) -> Int { 40 return 1 41 } 42 43 44 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 45 //セルの個数を指定するデリゲートメソッド(必須) 46 return dbCells.count 47 } 48 49 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 50 51 let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomTableViewCell 52 // セルに表示する細かいこと 53 arrayNum = dbTitleArray.firstIndex(of: dbCells[indexPath.row])! 54 cell.accessoryType = UITableViewCell.AccessoryType.disclosureIndicator 55 cell.TableSubLabel.textColor = #colorLiteral(red: 0.501960814, green: 0.501960814, blue: 0.501960814, alpha: 1) 56 cell.TableSubLabel.text = String(dbLetterArray[arrayNum]) 57 cell.backgroundColor = #colorLiteral(red: 0.6991055012, green: 0.8119484782, blue: 0.8208540082, alpha: 1) 58 59 cell.TableImage.image = UIImage(named: dbImageArray[arrayNum]) 60 cell.TableLabel.text = dbCells[indexPath.row] 61 cell.TableLabel.textColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1) 62 tableView.separatorColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1) 63 64 return cell 65 } 66 67 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 68 print("(indexPath.row)番目のcellがタップされた") 69 // セルの選択を解除 70 tableView.deselectRow(at: indexPath, animated: true) 71 //(indexPath.row)を入れる 72 cellIndex = dbImageArray[(indexPath.row)] 73 print("セルインデックス" + String(cellIndex)) 74 dbNum = (indexPath.row) 75 //BagDetailに遷移 76 performSegue(withIdentifier: "BagDetails", sender: nil) 77 } 78 79 override func prepare(for segue:UIStoryboardSegue, sender: Any? ) { 80 if let vcBagDetails = segue.destination as? ViewControllerBagDetails { 81 vcBagDetails.cellIndex2 = cellIndex 82 vcBagDetails.dbNum2 = dbNum 83 } 84 } 85 86 func noItemAlert (){ 87 print("アラート表示") 88 // アラートを作成 89 let alert = UIAlertController( 90 title: "TA・SU・KE", 91 message: "バッグにアイテムがありません。\nこの画面を閉じます", 92 preferredStyle: .alert) 93 94 let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler:{ 95 // ボタンが押された時の処理を書く(クロージャ実装) 96 (action: UIAlertAction!) -> Void in 97 print("OK") 98 self.performSegue(withIdentifier:"BackMenu", sender: nil) 99 }) 100 101 alert.addAction(defaultAction) 102 103 // アラート表示 104 self.present(alert, animated: true, completion: nil) 105 } 106} 107
前回投稿したときに、全て載せた方が良いとのことでしたので、全て載せさせていただきました
見にくくてすみません
"空ではない"
["カミナリ", "瞬足5"]
↑持っているアイテムによって変わります
試したこと
前回の質問で教えてもらったViewDidAppearで使っているlet dbCells = (deathblowNameArrayUD.array(forKey: "DeathBlowArray") as? [String]) ?? []
のプログラムで、letだからcellを作成するところで使うdbCellが変わっていないのではないかと思い、letを無くしました。dbCells = (deathblowNameArrayUD.array(forKey: "DeathBlowArray") as? [String]) ?? []
補足情報
Xcode 11.2.1
シュミレーター iPhone8
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/18 10:03