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

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

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

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

Q&A

0回答

165閲覧

CoreDataが導入できない

coco7777

総合スコア8

Swift

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

0グッド

0クリップ

投稿2023/01/19 10:30

作りたいアプリがほぼ完成したので、Coredataを導入してデータの保存をしようと考えてます。
構造体の配列(groupArray)の値を保存したいのです。
参考にしたサイトは構造体の配列の保存ではないので一部自分でコードを書いてやろうとしてます。それが原因だと思うのですが、nikkiTableViewControllerでEntity(KeepData)を使おうとすると13行目のようなエラーが出ます。
サイトの手順の前段階でCore Data Classにコードを書くのですが、この時にも画像1,2枚目のようなエラー?が出てます。
それぞれエラー分で検索し、coraDataModelを入れ直す、podファイルをアップデートするなど試しましたが一向に解消されず、作業が止まっています。
改善方法を教えていただきたいです。よろしくお願いします。

参考サイト ・https://www.fuwamaki.com/article/325 
https://hajihaji-lemon.com/swift/coredata-transient/

swift

1import UIKit 2import CoreData 3 4class nikkiTableViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UISearchBarDelegate{ 5 6 private let cellId = "cellId" 7 8 var dateSource = [groupArray]() 9 10 var addBarButtonItem:UIBarButtonItem! 11 12 var searchResult = [groupArray]() 13 private var list:[KeepData] = [] //Cannot find type 'KeepData' in scope 14 15 var ArrayCount: Int! 16 17 @IBOutlet weak var nikkiTableView: UITableView! 18 19 override func viewDidLoad() {super.viewDidLoad() 20 21 setupSearchBar() 22 23 addBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addBarButtonTapped(_:))) 24 addBarButtonItem.tintColor = UIColor.white 25 26 //navigationVarの右側に追加 27 self.navigationItem.rightBarButtonItem = addBarButtonItem 28 29 nikkiTableView.delegate = self 30 nikkiTableView.dataSource = self 31 32 let appearance = UINavigationBarAppearance() 33 34 let tapGesture = UITapGestureRecognizer( 35 target: self, 36 action: #selector(dismissKeyboard)) 37 view.addGestureRecognizer(tapGesture) 38 39 tapGesture.cancelsTouchesInView = false 40 41 } 42 43 @objc func dismissKeyboard() { 44 navigationItem.titleView?.endEditing(true) 45 } 46 47 func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool 48 { 49 return true 50 } 51 52 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { 53 if editingStyle == .delete { 54 searchResult.remove(at: indexPath.row) 55 nikkiTableView.deleteRows(at: [indexPath], with: .automatic) 56 57 } 58 } 59 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 60 61 return 190 62 } 63 64 func numberOfSections(in tableView: UITableView) -> Int { 65 66 return 1 67 } 68 69 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 70 71 return searchResult.count 72 73 } 74 75 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 76 77 let cell = nikkiTableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! nikkiTableViewCell 78 79 if let c = cell as? nikkiTableViewCell { 80 81 c.dateLabel?.text = searchResult[indexPath.row].date 82 c.hyoukaLabel?.text = searchResult[indexPath.row].hyouka 83 c.nameLabel?.text = searchResult[indexPath.row].name 84 c.topImageView.image = searchResult[indexPath.row].topImage 85 86 } 87 88 return cell 89 } 90 91 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 92 93 let storyboard = UIStoryboard(name: "nikkiTableView", bundle: nil) 94 let textVC = storyboard.instantiateViewController(withIdentifier: 95 "textViewController") as! textViewController 96 97 textVC.address = searchResult[indexPath.row].address 98 textVC.hyouka = searchResult[indexPath.row].hyouka 99 textVC.date = searchResult[indexPath.row].date 100 textVC.text = searchResult[indexPath.row].textView 101 textVC.imageArray = searchResult[indexPath.row].nikkiImageArray 102 textVC.name = searchResult[indexPath.row].name 103 textVC.topImageReceive = searchResult[indexPath.row].topImage 104 105 106 //値、参照渡しのコードを書く 107 navigationController?.pushViewController(textVC, animated: true) 108 109 } 110 111 @objc func addBarButtonTapped(_ sender: UIBarButtonItem) { 112 113 let hennsyuVc = storyboard?.instantiateViewController(withIdentifier: "hennsyuViewController") as! hennsyuViewController 114 115 116 hennsyuVc.callback1 = {n,d,h,t,a,i,ia in 117 118 self.dateSource.insert((groupArray(name: n, date: d, hyouka: h, textView: t, address: a,topImage: i, nikkiImageArray: ia)), at:0) 119 120 print("コールバック") 121 } 122 123 navigationController?.pushViewController(hennsyuVc, animated: true) 124 125 } 126 127 override func viewWillAppear(_ animated: Bool) { 128 129 searchResult = dateSource 130 131 nikkiTableView.reloadData() 132 133 // TODO: ①に戻ってきたらUITableViewを再描画します。 134 if AppState.isEdited { 135 // ③から完了をタップして戻ってきた場合は②に遷移します。 136 AppState.isEdited = false 137 138 } 139 140 } 141} 142 143 144class nikkiTableViewCell: UITableViewCell { 145 146 @IBOutlet weak var topImageView: UIImageView! 147 @IBOutlet weak var nameLabel: UILabel! 148 @IBOutlet weak var dateLabel: UILabel! 149 @IBOutlet weak var hyoukaLabel: UILabel! 150 151 override func awakeFromNib() { 152 super.awakeFromNib() 153 154 } 155 override func setSelected(_ selected: Bool, animated: Bool) { 156 super.setSelected(selected, animated: animated) 157 158 } 159 160 161} 162 163struct groupArray{ 164 165 var name: String 166 var date: String 167 var hyouka: String 168 var textView: String 169 var address: String 170 var topImage: UIImage 171 var nikkiImageArray: [UIImage] 172 173} 174 175extension groupArray: Equatable { 176 public static func ==(lhs:groupArray, rhs:groupArray) -> Bool { 177 return lhs.name == rhs.name && lhs.date == rhs.date && lhs.hyouka == rhs.hyouka && lhs.textView == rhs.textView && lhs.address == rhs.address 178 } 179}

イメージ説明
イメージ説明

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

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

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

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

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

hoshi-takanori

2023/01/19 12:02

Core Data って、後付けで保存のためにサクッと入れられるものじゃなくて、最初から Core Data を使う前提でアプリを設計する必要があるような。構造体じゃなくてオブジェクトだし…。 手っ取り早く保存したいだけなら、JSON が何かにして保存する方法もあります。 (あと、細かいこと言って申し訳ないけど、配列の要素の型を groupArray という名前にするのは違和感があるし、型名の先頭は大文字にするのが一般的です。)
coco7777

2023/01/23 09:19

Hoshi-takanoriさん 回答ありがとうございます オブジェクトの指摘ありがとうございます 指摘してくださったおかげで、調べて知識をつけることができました >Core Data って、後付けで保存のためにサクッと入れられるものじゃなくて、最初から Core Data を使う前提でアプリを設計する必要があるような。 作りたいものを作るのが学習効率がいいと言われて、知識不足で初めてしまいました、、、 設計の時点でCoreDataを使うように設定する必要があるのですね 教えていただきありがとうございます JSONですか 調べてみます >配列の要素の型を groupArray という名前にするのは違和感があるし、型名の先頭は大文字にするのが一般的です。 ご指摘ありがとうございます 以後新しいものを作るときには気をつけたいと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問