質問失礼します。
日付ごとのデータをCoreDataに保存したいです。
当日のデータがない場合は新規作成をする様に記載したのですが、
正しい日付が入っているデータだけでなく、
同時に中身が空のデータも保存されてしまいます。
新しい日付のデータが作成される時だけ一緒に空データが作成されるのですが、
insert,save文の使用方法が間違っているのでしょうか。
どなたかご教授いただけますと嬉しいです。
よろしくお願い致します。
SWift
1class CountViewController: UIViewController { 2 3 ///現在の日付 4 var nowDate = Date() 5 static var nowDateString = String() 6 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 11 //日付のフォーマットを変更する 12 let formatter: DateFormatter = DateFormatter() 13 formatter.dateFormat = "yyyyMMdd" 14 ///日付をStringにする 15 CountViewController.nowDateString = formatter.string(from: nowDate) 16 17 //もし今日の日付でデータが存在しなかったら 18 if CoreDataModel.selectOne(date: CountViewController.nowDateString) == [] { 19 //今日のデータを作成して保存する 20 CoreDataModel.insertData(date: CountViewController.nowDateString) 21 CoreDataModel.save() 22 23 } 24}
Swift
1class CoreDataModel { 2 3 static var context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 4 5 //データを挿入する 6 static func insertData(date: String) { 7 //Data型を作成して値を反映させる 8 let newData = Data(context: self.context) 9 newData.date = date 10 //インサートする 11 NSEntityDescription.insertNewObject(forEntityName: "Data", into: context) 12 } 13 14 //データを保存する 15 static func save() { 16 //コミットする 17 (UIApplication.shared.delegate as! AppDelegate).saveContext() 18 } 19 20 //データを一件取得 21 static func selectOne(date: String) -> [Data] { 22 23 var data = [Data]() 24 25 let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Data") 26 //条件指定 27 request.predicate = NSPredicate(format: "date == %@", date) 28 29 do{ 30 data = try context.fetch(request) as! [Data] 31 32 return data 33 34 }catch{ 35 print("エラー") 36 } 37 return data 38 } 39 40 //データを全件取得する 41 static func selectAll() -> [Data] { 42 43 var data = [Data]() 44 45 let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Data") 46 do{ 47 data = try context.fetch(request) as! [Data] 48 49 return data 50 }catch{ 51 print("エラー") 52 } 53 return data 54 } 55}
SWift
1class AppDelegate: UIResponder, UIApplicationDelegate { 2 3//CoreData関連部分のみ抜粋 4 lazy var persistentContainer: NSPersistentContainer = { 5 6 let container = NSPersistentContainer(name: "CoreDataTest") 7 container.loadPersistentStores(completionHandler: { (storeDescription, error) in 8 if let error = error as NSError? { 9 10 fatalError("Unresolved error (error), (error.userInfo)") 11 } 12 }) 13 return container 14 }() 15 16 func saveContext () { 17 let context = persistentContainer.viewContext 18 if context.hasChanges { 19 do { 20 try context.save() 21 } catch { 22 let nserror = error as NSError 23 fatalError("Unresolved error (nserror), (nserror.userInfo)") 24 } 25 } 26 } 27}
回答1件
あなたの回答
tips
プレビュー