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

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

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

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

TableView

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

Swift

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

Q&A

解決済

1回答

2262閲覧

signal SIGABRT

退会済みユーザー

退会済みユーザー

総合スコア0

Core Data

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

TableView

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

Swift

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

0グッド

0クリップ

投稿2017/02/25 15:37

編集2017/02/26 14:00

swift

1import UIKit 2import CoreData 3 4class ViewController: UIViewController, UITableViewDataSource { 5 6 @IBOutlet weak var tableView: UITableView! 7 8 var people = [Person]() 9 10 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 15 16 title = "\"The List\"" 17 //tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell") 18 } 19 20 func tableView(_ tableVeiw: UITableView, numberOfRowsInSection section: Int) -> Int { 21 return people.count 22 } 23 24 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 25 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") 26 27 let person = people[indexPath.row] 28 29 cell!.textLabel!.text = person.value(forKey: "name") as? String 30 31 //subtitle 現在日時を取得 32 let nowtime = Person() 33 34 nowtime.time = NSDate() // 現在日時の取得 35 let dateFormatter = DateFormatter() 36 dateFormatter.locale = NSLocale(localeIdentifier: "en_US") as Locale! // ロケールの設定 37 dateFormatter.dateFormat = "yyyy年MM月dd日 HH:mm"//:ss" // 日付フォーマットの設定 38 39 //let nowtime = Kei[indexPath.row] 40 let dateString = dateFormatter.string(from: nowtime.time as! Date) 41 print(dateString) // -> 2014/06/25 02:13:18 42 cell!.detailTextLabel!.text = dateString 43 //cell!.detailTextLabel!.text = person.value(forKey: "dateString") as? String 44 45 return cell! 46 } 47 48 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 49 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 50 51 if editingStyle == .delete{ 52 //self.tableView.setEditing(true, animated: true) 53 54 context.delete(people[indexPath.row]) 55 56 (UIApplication.shared.delegate as! AppDelegate).saveContext() 57 58 do { 59 people = try context.fetch(Person.fetchRequest()) 60 }catch let error as NSError { 61 print("Could not save \(error), \(error.userInfo)") 62 } 63 tableView.reloadData() 64 } 65 } 66 67 @IBAction func addName(_ sender: Any) { 68 let alert = UIAlertController(title: "New name", message: "Enter a new name", preferredStyle: .alert) 69 70 let saveAction = UIAlertAction(title: "Save", style: .default) { (action) in 71 let textField = alert.textFields?.first 72 self.saveName(name: textField!.text!) 73 self.tableView.reloadData() 74 } 75 76 let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) 77 78 alert.addTextField(configurationHandler: nil) 79 alert.addAction(saveAction) 80 alert.addAction(cancelAction) 81 82 present(alert, animated: true, completion: nil) 83 } 84 85 func saveName(name: String){ 86 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 87 88 let person = Person(entity: Person.entity(), insertInto: context) 89 90 person.setValue(name, forKey: "name") 91 92 do{ 93 try context.save() 94 people.append(person) 95 //self.data = [NSData()] 96 } catch let error as NSError { 97 print("Could not save \(error), \(error.userInfo)") 98 } 99 } 100 101 override func viewWillAppear(_ animated: Bool) { 102 super.viewWillAppear(animated) 103 104 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 105 106 do{ 107 let result = try context.fetch(Person.fetchRequest()) 108 people = result as! [Person] 109 }catch let error as NSError { 110 print("Could not save \(error), \(error.userInfo)") 111 } 112 //tableView.reloadData() 113 } 114 115 override func didReceiveMemoryWarning() { 116 super.didReceiveMemoryWarning() 117 } 118 119} 120

実現したいこと
アラートテキストで入力した最終更新時間の年月日時刻をsubtitleに保存し時間が進んでも変わらないようにしたい

やってみたこと
//subtitle 現在日時を取得

let now = NSDate()

NSDateのコードを以下のように変更し、コード的にはエラーはないのですが実行するとsignal SIGABRTが出てどこが間違っているのかいくら探しても見つからなくて困っています。

//subtitle 現在日時を取得 let nowtime = Person() nowtime.time = NSDate() // 現在日時の取得

エンティティはこのようになっています

イメージ説明

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下の様にすることでやりたいことは出来ていると思います、試してみてください。

swift

1import UIKit 2import CoreData 3 4class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 5 6 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 7 @IBOutlet weak var tableView: UITableView! 8 9 var people = [Person]() 10 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 15 title = "\"The List\"" 16 } 17 18 func tableView(_ tableVeiw: UITableView, numberOfRowsInSection section: Int) -> Int { 19 return people.count 20 } 21 22 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 23 24 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 25 26 let person = people[indexPath.row] 27 cell.textLabel?.text = person.name 28 29 let dateFormatter = DateFormatter() 30 dateFormatter.locale = NSLocale(localeIdentifier: "en_US") as Locale! // ロケールの設定 31 dateFormatter.dateFormat = "yyyy年MM月dd日 HH:mm"//:ss" // 日付フォーマットの設定 32 33 let dateString = dateFormatter.string(from: person.time) 34 cell.detailTextLabel!.text = dateString 35 36 return cell 37 } 38 39 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 40 41 if editingStyle == .delete { 42 context.delete(people[indexPath.row]) 43 (UIApplication.shared.delegate as! AppDelegate).saveContext() 44 fetchRequest() 45 } 46 } 47 48 @IBAction func addName(_ sender: UIButton) { 49 let alert = UIAlertController(title: "New name", message: "Enter a new name", preferredStyle: .alert) 50 51 let saveAction = UIAlertAction(title: "Save", style: .default) { (action) in 52 53 let textField = alert.textFields?.first 54 self.saveName(name: textField!.text!) 55 self.tableView.reloadData() 56 } 57 58 let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) 59 60 alert.addTextField(configurationHandler: nil) 61 alert.addAction(saveAction) 62 alert.addAction(cancelAction) 63 64 present(alert, animated: true, completion: nil) 65 } 66 67 func saveName(name: String){ 68 let person = Person(entity: Person.entity(), insertInto: context) 69 person.name = name 70 person.time = Date() 71 72 do{ 73 try context.save() 74 people.insert(person, at: 0) 75 } catch let error as NSError { 76 print("Could not save \(error), \(error.userInfo)") 77 } 78 } 79 80 override func viewWillAppear(_ animated: Bool) { 81 super.viewWillAppear(animated) 82 83 fetchRequest() 84 } 85 86 func fetchRequest() { 87 88 do{ 89 let fetchRequest = Person.fetchRequest() 90 let sortDescripter = NSSortDescriptor(key: "time", ascending: false) 91 fetchRequest.sortDescriptors = [sortDescripter] 92 93 let result = try context.fetch(fetchRequest) 94 people = result as! [Person] 95 }catch let error as NSError { 96 print("Could not save \(error), \(error.userInfo)") 97 } 98 tableView.reloadData() 99 } 100} 101 102 103import UIKit 104import CoreData 105 106@objc(Person) 107class Person: NSManagedObject { 108 109 @NSManaged var name:String 110 @NSManaged var time:Date 111}

投稿2017/02/25 23:03

編集2017/02/25 23:04
_Kentarou

総合スコア8490

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

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

退会済みユーザー

退会済みユーザー

2017/02/26 14:04

試してみたのですが以下のところでエラーが出たのですがこの場合どうしたらいいのでしょうか? import UIKit import CoreData @objc(Person) class Person: NSManagedObject { @NSManaged var name:String @NSManaged var time:Date } ↑ それとこれは別なソースファイルを新たに作ってそのソースファイルに書くのでしょうか?
_Kentarou

2017/02/26 15:15 編集

試していた時はエラーにならなかったのですが、今開いたら同じエラーになりました。 書いてあるモデルは消して、すでに作成されているモデルにプロパティを書いてみてください。
退会済みユーザー

退会済みユーザー

2017/02/26 15:52

そうなんですね それと勉強不足ですいませんがプロパティとはどの部分のことでしょうか? 教えていただけると助かります
_Kentarou

2017/02/26 23:57 編集

動くサンプルを何処かにあげますのでお待ちを。
退会済みユーザー

退会済みユーザー

2017/02/27 04:01

分かりました わざわざありがとうございます
退会済みユーザー

退会済みユーザー

2017/02/27 13:24

ありがとうございます おかげさまでイメージ通りに出来ました それとkentarouさんのGitHubのteratail_61308を参考にしたいと思ったのですが参考にさせて頂いても宜しいでしょうか?
_Kentarou

2017/02/27 15:24

上げているのは全て好きに使ってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問