🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

392閲覧

tableviewのラベルに表示した数字をUserdefaultsで保存したい

blast4.2

総合スコア10

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/09/12 22:59

Swift

1import UIKit 2 3class secondViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 4 5 // テーブルビュー 6 @IBOutlet var secondTableView: UITableView! 7 8 // ViewControllerから選択されたCell番号を受け取る変数 9 var getCell: Int! 10 11 // セルの要素をあらかじめ決めうち 12 // 果物 13 let fruitArray: [String] = ["リンゴ", "ブドウ", "バナナ", "オレンジ", "レモン", "ピーチ"] 14 // スポーツ 15 let sportArray: [String] = ["サッカー", "野球", "ラグビー", "卓球"] 16 // アニメ 17 let animeArray: [String] = ["ポ", "プ", "テ", "ピ", "ピ", "ッ", "ク"] 18 // 野菜 19 let vegetableArray: [String] = ["スイカ", "トマト", "キャベツ", "キュウリ", "大豆", "レタス", "サニーレタス"] 20 // 映画 21 let movieArray: [String] = ["ハリーポッター", "スターウォーズ", "アイアンマン", "スパイダーマン", "ゴーストバスターズ", "ブラックホークダウン", "タイタニック", "バックトゥーザフューチャー", "ジュラシックパーク"] 22 // 飲み物 23 let drinkArray: [String] = ["コーラ", "烏龍茶"] 24 25 // 選択されたジャンルの配列の長さ変数 26 var arrayLength: Int! 27 28 override func viewDidLoad() { 29 super.viewDidLoad() 30 31 // テーブルビューにTableViewCellを登録 32 secondTableView.register(UINib(nibName: "secondTableViewCell", bundle: nil),forCellReuseIdentifier: "cell_02") 33 34 secondTableView.delegate = self 35 secondTableView.dataSource = self 36 37 // 選択されたジャンルによってセルの数を変える 38 // getCellの中身が・・・ 39 switch getCell { 40 // 0のとき 41 case 0: 42 arrayLength = fruitArray.count 43 // 1のとき 44 case 1: 45 arrayLength = sportArray.count 46 // 2のとき 47 case 2: 48 arrayLength = animeArray.count 49 // 3のとき 50 case 3: 51 arrayLength = vegetableArray.count 52 // 4のとき 53 case 4: 54 arrayLength = movieArray.count 55 // 5のとき 56 case 5: 57 arrayLength = drinkArray.count 58 default: 59 break 60 } 61 62 } 63 64 override func didReceiveMemoryWarning() { 65 super.didReceiveMemoryWarning() 66 // Dispose of any resources that can be recreated. 67 } 68 69 70 // セルの数を指定 71 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 72 // someArrayの中身の数だけセルを表示 73 return arrayLength 74 } 75 76 // 各セルの要素を指定 77 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 78 // UITableViewCellのインスタンスを生成 79 let cell = secondTableView.dequeueReusableCell(withIdentifier: "cell_02", for: indexPath) as! secondTableViewCell 80 81 // 選択されたジャンルによってセルの中身を変える 82 // getCellの中身が・・・ 83 switch getCell { 84 // 0のとき 85 case 0: 86 // セルのUILabelに配列の中身を順に表示 87 cell.secondLabel.text = fruitArray[indexPath.row] 88 // 1のとき 89 case 1: 90 cell.secondLabel.text = sportArray[indexPath.row] 91 // 2のとき 92 case 2: 93 cell.secondLabel.text = animeArray[indexPath.row] 94 // 3のとき 95 case 3: 96 cell.secondLabel.text = vegetableArray[indexPath.row] 97 // 4のとき 98 case 4: 99 cell.secondLabel.text = movieArray[indexPath.row] 100 // 5のとき 101 case 5: 102 cell.secondLabel.text = drinkArray[indexPath.row] 103 default: 104 break 105 } 106 107 return cell 108 } 109 110} 111

Swift

1import UIKit 2 3class secondTableViewCell: UITableViewCell { 4 5 var number = 0 6 7 override func awakeFromNib() { 8 super.awakeFromNib() 9 // Initialization code 10 } 11 12 override func setSelected(_ selected: Bool, animated: Bool) { 13 super.setSelected(selected, animated: animated) 14 15 } 16 17 @IBOutlet var secondLabel: UILabel! 18 19 @IBOutlet weak var zero: UILabel! 20 21 @IBAction func plus(_ sender: Any) { 22 number = number + 1 23 zero.text = String(number) 24 } 25 26 @IBAction func minus(_ sender: Any) { 27 number = number - 1 28 zero.text = String(number) 29 if number < 0 { 30 number = 0 31 zero.text = String(number) 32 } 33 34 } 35 36 @IBOutlet weak var minus: UIButton! 37 38}

イメージ説明

tableviewcellに+とーのボタンを配置し、ラベルに個数を表示させるカウントアプリを作成しました。
アプリを一度終了したり遷移元の画面に戻ると、ラベルの数字がリセットされてしまい、開き直すと全項目0になってしまいます。
Userdefaultsを利用すればラベルに表示された個数を保存出来ると知り、色々WEB上で調べたのですが、サンプルアプリやコードを読んでも、近いものがなく、どちらのファイルに何を記載すればよいのかもわかりません。

ご教授いただけないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2019/09/13 00:55

「UserDefaultsの使い方が分からない」との質問ですが、どのように分からないのでしょう?ご自身で試してみたのですか?であれば、その試したものをご提示ください。
guest

回答1

0

ベストアンサー

初心者にありがちなのは、触ったことのない機能をいきなり今作っているソフトに足そうして上手く行かない!となることです。

まずUserDefaultsがどんなものか、どんな使い方をするものなのか、なんの形式が保存できるのか、といったようなことを別途新規プロジェクトでも作って検証し、慣れてください。

そうしてUserDefaultsが判ってくると、おそらくまた新しい課題に当たると思います。
例えば今のアプリでUserDefaultsに何のデータをどういう形式で入れたら良いかです。

ちなみにそれはここの回答者が考えることではなく、質問者さん自身が考える領域です。
(困ったらヒントは出せると思いますが。)

そんな感じで一個ずつ課題を解決していってください。
ときには出戻りもあると思います。
頑張ってください。


追記:おそらくこのアプリに隠れている問題点

  • 現状セルにしかない個数のデータはデータソース側(secondViewController側)で保持し、相互に反映されるようにしないといけない。やり方はいろいろある。
  • 無駄なswitchがあるので、viewDidLoad一回のswitchで済ます(対象の配列をメンバーで保持するだけ)か、そもそも二次元配列などにしてswitchそのものを無くしたほうがいい
  • 個数をUserDefaultsで保持する場合の保存形式。一番楽そうなのはkeyに素材名、valueに個数をそのまま突っ込んでしまうもの。本当にそれでいいかの議論の余地はあり。

投稿2019/09/13 01:51

編集2019/09/13 02:02
takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hameji

2019/09/13 14:44 編集

自分も禿同です。 でも、良いサンプルといいうか、勉強するページってなかなかないですよね。。。 customcellを作るとか、tableViewにheaderをつけるとかそういう個々のテクニック的なサイトはありますが、まずの構想、考え方、設計の仕方、実装の順序、仕方、必要なチェック等一貫して通しで勉強できるとこなんて見たことない気がします。 プロから見た上達のオススメの勉強方法って何になるんですか? (ちなみに自分はメンターをつけて、自作サービスを作り途中で、いろんな指摘を受けて、7ヶ月経ちますが、まだ完成しません。(T_T))
takabosoft

2019/09/17 00:37

自分がこの分野でプロかどうかは置いておいて、おっしゃるようにブログやここやqiitaでは断片的な情報しかありませんので、順序立てて勉強するのであれば書籍や今でしたら有料オンライン講座等(Udemyとか?(すみません自分は見たことがないですが))になるのかなと思います。入門書/オンライン講座のようなもので、おおまかな開發の流れを掴んだあとは、それぞれ専門性の高い書籍で補間するのが良いかなとは思います。古い情報に当たって自分の環境で動かない事は多々ありますがw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問