質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

3710閲覧

[Swift]UserDefaultsで保存した配列の1つだけを削除したい

Jonny_dayo

総合スコア48

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2019/10/03 05:35

前提・実現したいこと

TableViewのセルの削除をしたいです。
削除自体の実装はしたのですが、ページ遷移をすると削除したセルも再び出てきてしまいます。
調べてみたところ削除する際にuserdefaultsから該当する値をremoveすることは分かったのですが、
どうやって削除したら良いのか分からず困っています…

また、同じ配列の値を次の画面に渡したいとも思っています。。

ソースコード

Swift

1import UIKit 2 3class recipeViewController: UIViewController,UITableViewDelegate, UITableViewDataSource { 4 5 @IBOutlet var tableview: UITableView! 6 7 var textArray:[String] = [] 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 tableview.delegate = self 13 tableview.dataSource = self 14 15 } 16 //別のviewの"alertで保存したものを呼ぶ" 17 override func viewWillAppear(_ animated: Bool) { 18 textArray = UserDefaults.standard.array(forKey: "alert") as? [String] ?? [] 19 tableview.reloadData() 20 } 21 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 22 return textArray.count 23 } 24 25  //Cellのテキストに保存した"alert"を表示させる 26 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 27 let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell") 28 29 cell.textLabel?.text = textArray[indexPath.row] 30 31 return cell 32 } 33 34 //Cellの削除(何故か復活する) 35 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { 36 if editingStyle == .delete { 37 textArray.remove(at: indexPath.row) 38 tableView.deleteRows(at: [indexPath], with: .fade) 39 } 40 } 41  //次の画面に値を渡しながら遷移したい 42 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 43 44 performSegue(withIdentifier: "detail", sender: nil) 45 } 46 47 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 48 49 let nextVC = segue.destination as! CopyViewController 50 if segue.identifier == "detail"{ 51 52  nextVC.recipe = textArray[indexPath.row] 53//Use of unresolved identifier 'indexPath'が出てエラーになる 54 55 } 56 } 57} 58

ツールのバージョン

Xcode : Version 11.0
Swift : Apple Swift version 5.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

不要な要素を削除したArrayで、UserDefaultsを上書きすればいいのでは?

投稿2019/10/03 05:48

thyda.eiqau

総合スコア2982

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

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

Jonny_dayo

2019/10/03 06:06 編集

回答ありがとうございます!! textArray.remove(at: indexPath.row) これが不要な要素を削除したArrayなのかなと思ってるのですが、 ここの後に var saver: [String] = UserDefaults.standard.array(forKey: "alert") as? [String] ?? [] saver.append(textArray) UserDefaults.standard.set(saver, forKey: "alert") を追加してみたところCannot convert value of type '[String]' to expected argument type 'String'と出てしまいました… でももしかして私のこれって上書きじゃなくて追加になってるからそもそも違うとかですか…?
thyda.eiqau

2019/10/03 06:21

textArray.remove(at: indexPath.row) の後で、 UserDefaults.standard.set(textArray, forKey: "alert") UserDefaults.standard.synchronize() ではないかと思います
Jonny_dayo

2019/10/03 06:44

できたあああああああ!!! ありがとうございます!!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問