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

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

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

Core DataはAppleのOS X and iOSのためのオブジェクトモデリングと持続性を持ったフレームワークです。Xcodeはエンティティー、属性そして関係性を特定するためのオブジェクトモデルの編集機能を提供します。

Swift

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

Q&A

1回答

1397閲覧

CoreData 保存したテキストをUILabelに表示させたい

rhxo

総合スコア10

Core Data

Core DataはAppleのOS X and iOSのためのオブジェクトモデリングと持続性を持ったフレームワークです。Xcodeはエンティティー、属性そして関係性を特定するためのオブジェクトモデルの編集機能を提供します。

Swift

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

0グッド

1クリップ

投稿2019/02/25 13:47

編集2019/03/03 11:18

アプリ開発初心者でCoreDataを使い始めました。

*やりたいこと*
UITextViewのテキストをCoreDataを使って保存させ、UILabelに表示させたいです。

*現状*
saveButtonを初めに押した際のテキストは保存され、UILabelにも表示させることは出来ました。
ですが、その後UITextViewのテキストを空にし、初めとは異なるテキストを入力したものは保存・表示させることが出来ません。
saveButtonを何度押しても、テキストを新規保存・表示させるようにするにはどうしたらいいでしょうか?

//保存するためのコード
var ent01:[entityName] = []
var con01 = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

@IBAction func saveButton(_ sender: Any) {
let ent001 = entity(context: self.con01)
ent001.text = UITextView.text
self.ent01.append(ent001)
(UIApplication.shared.delegate as! AppDelegate).saveContext()
}

//読み込みのためのコード
func readData() -> String {
var ret = ""

let appDelegate: AppDelegate = (UIApplication.shared.delegate as! AppDelegate)
let context: NSManagedObjectContext = appDelegate.persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "entity")
request.returnsObjectsAsFaults = false

do {
let results: Array = try context.fetch(request)
if (results.count > 0 ) {
let obj = results[0] as! NSManagedObject
let txt = obj.value(forKey: "Attribute") as! String
print ("READ:(txt)")
ret = txt
}
} catch let error as NSError {
print("READ ERROR:(error.localizedDescription)")
}
return ret
}

始めたばかりで勉強不足ですが、何かアドバイス頂けますと幸いです。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

こんな感じでどうでしょう。

EntityをEntityNameとして、
Attributes に
date (Type: Date)
text (Type: String)
としました。
保存ボタンを myButton
ラベルを myLabel
前に保存したテキストの表示ボタンを prevButton
次のテキストの表示ボタンを nextButton
としました。

swift

1import UIKit 2import CoreData 3 4class ViewController: UIViewController { 5 6 @IBOutlet var myTextView:UITextView! 7 @IBOutlet var myButton:UIButton! 8 @IBOutlet var myLabel:UILabel! 9 @IBOutlet var prevButton:UIButton! 10 @IBOutlet var nextButton:UIButton! 11 12 var ent01:[EntityName] = [] 13 var now = Date() 14 let myContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 15 16 override func viewDidLoad() { 17 super.viewDidLoad() 18 } 19 20 @IBAction func saveButton(){ 21 let entityname = EntityName(context: myContext) 22 now = Date() 23 entityname.date = now 24 entityname.text = myTextView.text 25 myLabel.text = myTextView.text 26 do{ 27 let sortDescripter = NSSortDescriptor(key: "date", ascending: true) 28 let fetchRequest: NSFetchRequest<EntityName> = EntityName.fetchRequest() 29 fetchRequest.sortDescriptors = [sortDescripter] 30 ent01 = try myContext.fetch(fetchRequest) 31 } 32 catch { 33 print("Fetching Failed.") 34 } 35 (UIApplication.shared.delegate as! AppDelegate).saveContext() 36 } 37 38 @IBAction func prevButtonPushed(){ 39 if let i = ent01.index(where: {$0.date == now}), i >= 1{ 40 myLabel.text = ent01[i - 1].text 41 now = ent01[i - 1].date! 42 } 43 } 44 45 @IBAction func nextButtonPushed(){ 46 if let i = ent01.index(where: {$0.date == now}), i < ent01.count - 1{ 47 myLabel.text = ent01[i + 1].text 48 now = ent01[i + 1].date! 49 } 50 } 51}

投稿2019/03/08 15:14

BMJr

総合スコア80

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問