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

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

新規登録して質問してみよう
ただいま回答率
85.48%
保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Swift

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

Q&A

解決済

1回答

1364閲覧

[swift 5]メモの内容が保存できない[至急!!!!]

Kaguya_4869

総合スコア116

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Swift

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

0グッド

1クリップ

投稿2019/11/30 09:04

編集2019/11/30 09:46

#質問したいこと
追加画面で保存した内容がcellに反映されません。
今までできていて、コードを直している間に消えてしまったみたいです。コマンド+zでも元の部分まで戻らず、抜けている部分を教えていただければ幸いです。

#コード

swift

1//ホーム 2//ホーム画面 3import UIKit 4 5 6 7class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate { 8 9 @IBOutlet weak var memoTableView: UITableView! 10 11// var memoArray = [String]() 12 13 let ud = UserDefaults.standard 14 15 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 16 return MemonoNakami.count 17 } 18 19 20 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 21 let cell = tableView.dequeueReusableCell(withIdentifier: "memoCell", for: indexPath) 22 cell.textLabel?.text = MemonoNakami[indexPath.row] 23 return cell 24 } 25 26 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 27 self.performSegue(withIdentifier: "toDetail", sender: nil) 28 //押したら押した状態を解除 29 tableView.deselectRow(at: indexPath, animated: true) 30 } 31 32 33 override func viewDidLoad() { 34 super.viewDidLoad() 35 36 //追加画面で入力した内容を取得する 37 if UserDefaults.standard.object(forKey: "TodoList") != nil { 38 MemonoNakami = UserDefaults.standard.object(forKey: "TodoList") as! [String] 39 } 40// memoTableView.delegate = self 41// memoTableView.dataSource = self 42 memoTableView.reloadData() 43 } 44 override func viewWillAppear(_ animated: Bool) { 45 loadMemo() 46 } 47 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 48 //destinationのクラッシュ防ぐ 49 if segue.identifier == "toDetail"{ 50 //detailViewControllerを取得 51 //as! DetailViewControllerでダウンキャストしている 52 let detailViewController = segue.destination as! DetailViewController 53 //遷移前に選ばれているCellが取得できる 54 let selectedIndexPath = memoTableView.indexPathForSelectedRow! 55 detailViewController.selectedMemo = MemonoNakami[selectedIndexPath.row] 56 detailViewController.selectedRow = selectedIndexPath.row 57 } 58 } 59 func loadMemo(){ 60 if ud.array(forKey: "memoArray") != nil{ 61 //取得 またas!でアンラップしているのでnilじゃない時のみ 62 MemonoNakami = ud.array(forKey: "memoArray") as![String] 63 //reloadしてくれる 64 memoTableView.reloadData() 65 } 66 } 67 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { 68 69 if editingStyle == .delete { 70 71 //resultArray内のindexPathのrow番目をremove(消去)する 72 MemonoNakami.remove(at: indexPath.row) 73 74 //再びアプリ内に消去した配列を保存 75 ud.set(MemonoNakami, forKey: "memoArray") 76 77 //tableViewを更新 78 tableView.reloadData() 79 } 80 } 81} 82

swift

1//追加画面 2import UIKit 3import SwiftyTesseract 4 5var MemonoNakami = [String]() 6 7class AddViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 8 9 @IBOutlet weak var memoTextView: UITextView! 10 @IBOutlet weak var imageView: UIImageView! 11 @IBOutlet weak var imageButton: UIButton! 12 13 let swiftyTesseract = SwiftyTesseract(language: RecognitionLanguage.japanese) 14 let saveData: UserDefaults = UserDefaults.standard 15 16 //カメラボタンがタップされた時の処理 17 @IBAction func launchCamera(_ sender: UIButton) { 18 let camera = UIImagePickerController.SourceType.camera 19 if UIImagePickerController.isSourceTypeAvailable(camera) { 20 let picker = UIImagePickerController() 21 picker.sourceType = camera 22 picker.delegate = self 23 self.present(picker, animated: true) 24 } 25 imageView.isHidden = false 26 imageButton.isHidden = true 27 } 28 29 //アルバムから写真を選択 30 @IBAction func openAlbum() { 31 //カメラロールを使えるかの確認 32 if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { 33 34 //カメラロールの画像を選択して画像を表示するまでの一連の流れ 35 let picker = UIImagePickerController() 36 picker.sourceType = .photoLibrary 37 picker.delegate = self 38 39 picker.allowsEditing = true 40 41 present(picker, animated: true, completion: nil) 42 } 43 } 44 45// //カメラロールから写真を選択する処理 46// @IBAction func choosePicture() { 47// // カメラロールが利用可能か? 48// if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { 49// // 写真を選ぶビュー 50// let pickerView = UIImagePickerController() 51// // 写真の選択元をカメラロールにする 52// // 「.camera」にすればカメラを起動できる 53// pickerView.sourceType = .photoLibrary 54// // デリゲート 55// pickerView.delegate = self 56// // ビューに表示 57// self.present(pickerView, animated: true) 58// } 59// } 60// 61 62 63 //ユーザーが撮影し終わった時の処理 64 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { 65 let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage 66 self.imageView.image = image 67 UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil) 68 self.dismiss(animated: true) 69 70 UserDefaults.standard.set(image.jpegData(compressionQuality: 0.8), forKey: "MemoImage") 71 saveData.synchronize() 72 } 73 74 override func viewDidLoad() { 75 super.viewDidLoad() 76 77// donebuttonの実装 78 let kbToolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 320, height: 40)) 79 kbToolBar.barStyle = UIBarStyle.default // スタイルを設定 80 kbToolBar.sizeToFit() // 画面幅に合わせてサイズを変更 81 // スペーサー 82 let spacer = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace, target: self, action: nil) 83 // 閉じるボタン 84 let commitButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.done, target: self, action: #selector(self.commitButtonTapped)) 85 kbToolBar.items = [spacer, commitButton] 86 memoTextView.inputAccessoryView = kbToolBar 87 imageView.isHidden = true 88 89 //first image 90 imageView.image = UIImage(named: "No-Image.PNG") 91// imageView.isHidden = true 92 } 93 94 @objc func commitButtonTapped() { 95 self.view.endEditing(true) 96 } 97 98 99 100 @IBAction func save(_ sender: Any) { 101 102 let inputText = memoTextView.text 103 let ud = UserDefaults.standard 104 if ud.array(forKey: "memoArray") != nil{ 105 106 var saveMemoArray = ud.array(forKey: "memoArray") as! [String] 107 108 if inputText != ""{ 109 //配列に追加 110 saveMemoArray.append(inputText!) 111 ud.set(saveMemoArray, forKey: "memoArray") 112 }else{ 113 showAlert(title: "何も入力されていません") 114 115 } 116 117 }else{ 118 var newMemoArray = [String]() 119 120 if inputText != ""{ 121 122 newMemoArray.append(inputText!) 123 ud.set(newMemoArray, forKey: "memoArray") 124 }else{ 125 showAlert(title: "何も入力されていません") 126 } 127 } 128 showAlert(title: "保存完了") 129 ud.synchronize() 130 } 131 132 func showAlert(title:String){ 133 let alert = UIAlertController(title: title, message: nil, preferredStyle: .alert) 134 135 alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) 136 137 alert.addAction(UIAlertAction(title: "キャンセル", style: .cancel, handler: nil)) 138 139 self.present(alert, animated: true, completion:nil) 140 } 141 142 143 @IBAction func loadimageView() { 144 print("読み込み開始") 145 swiftyTesseract.performOCR(on: imageView.image!) { recognizedString in 146 guard let text = recognizedString else { return } 147 print("(text)") 148 149 self.memoTextView.text = text 150 151 } 152 } 153} 154

swift

1//ホーム画面のtableViewCell 2import UIKit 3 4 5 6class TableViewCell: UITableViewCell { 7 8 @IBOutlet weak var cellImage: UIImageView! 9 @IBOutlet weak var cellLabel: UILabel! 10 11 let uuid = NSUUID().uuidString 12 13 override func awakeFromNib() { 14 super.awakeFromNib() 15 16// cellLabel.text = MemonoNakami 17 let imageData:NSData = UserDefaults.standard.object(forKey: "saveImage") as! NSData 18 cellImage.image = UIImage(data: imageData as Data) 19 // Initialization code 20 } 21 22 override func setSelected(_ selected: Bool, animated: Bool) { 23 super.setSelected(selected, animated: animated) 24 25 // Configure the view for the selected state 26 } 27 28 //ここを追加 29 func fill(image: UIImageView, titleLb: String, date: String, siteName: String){ 30 cellImage.image = imageView?.image 31 32 } 33 34 // 追加 35 override func prepareForReuse() { 36 super.prepareForReuse() 37 cellImage.image = imageView?.image 38 39 } 40 41 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 42 let cell = tableView.dequeueReusableCell(withIdentifier: "tableViewCell", for: indexPath) as! TableViewCell 43 //画像を初期化 44// cellImage.image = nil 45 return cell 46 } 47 48 49} 50

至急です。よろしくお願いします!!

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/11/30 10:18

至急なら、誰かにお金払ってやってもらってください。 自分の都合のいいときに回答がもらえるサイトではありません。
Kaguya_4869

2019/11/30 10:50 編集

そうですね。そうします。何か誤解をしていたようです。 次からは気をつけさせていただきます。 この度は不快な思いをさせてしまい、大変申し訳ありませんでした。
guest

回答1

0

ベストアンサー

ViewControllerのviewDidLoadで以下をコメントアウトしているせいでDelegateを注入できていないのでは?

Swift

1// memoTableView.delegate = self 2// memoTableView.dataSource = self

投稿2019/12/02 12:47

nakasho_dev

総合スコア2655

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

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

Kaguya_4869

2019/12/02 22:18

本当にありがとうございます!ずっと悩んでいて、ようやく直りました。 本当にありがとうございます!!
nakasho_dev

2019/12/03 02:15

私も『至急』と書いてあったから、すぐには回答しないで良いや、と思いました。質問文には気を付けた方が良いです。また、正しく動いている状態でgitリポジトリに登録するなど、バージョン管理はした方が良いです。
Kaguya_4869

2019/12/04 05:07

はい!アドバイスありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問