2017-02-15 18 views
0

私は新しくobjCには理解していません。Swift Coredataの値を変更して新規作成しない

私は週プレーニングのためのアプリをやって、私は -name -codeName -Task01 毎日に私を追加するボタンを、持っています。 。 -Task10

しかし、特定の1日を別のボタンで編集したい場合、私はいつも残りの日を削除します。私は多くのnilsで新しいエンティティを作成し、1日だけが情報でいっぱいです。ここで私のゲットーの解決策ですが、それは正しく動作していない、それは数回働いている、それは約512のsearchResults.countを持っていると言って、遅れを開始し、仕事をしないと...

私は、属性とは、新しいエンティティここ

を作成いけないです編集のための私のコード火曜日(週の残りは月曜日と同じであるが、そのロングコードは、ので、ここで月曜日と火曜日とコー​​ドのみです):

func getAndPrintData() { 

    let fetchRequest: NSFetchRequest<Workout> = Workout.fetchRequest() 

    do { 
     let searchResults = try getContext().fetch(fetchRequest) 
     print ("num of results = \(searchResults.count)") 
     for works in searchResults as [NSManagedObject] { 


      if let moc = managedObjectContext { 
       let workout = Workout(context: moc) 

       workout.mondayNameCD = works.value(forKey: "mondayNameCD") as! String? 
       workout.mondayCodeNameCD = works.value(forKey: "mondayCodeNameCD") as! String? 
       workout.mondayTask01 = works.value(forKey: "mondayTaks01") as! String? 
       workout.mondayTask02 = works.value(forKey: "mondayTaks02") as! String? 
       workout.mondayTask03 = works.value(forKey: "mondayTaks03") as! String? 
       workout.mondayTask04 = works.value(forKey: "mondayTaks04") as! String? 
       workout.mondayTask05 = works.value(forKey: "mondayTaks05") as! String? 
       workout.mondayTask06 = works.value(forKey: "mondayTaks06") as! String? 
       workout.mondayTask07 = works.value(forKey: "mondayTaks07") as! String? 
       workout.mondayTask08 = works.value(forKey: "mondayTaks08") as! String? 
       workout.mondayTask09 = works.value(forKey: "mondayTaks09") as! String? 
       workout.mondayTask10 = works.value(forKey: "mondayTaks10") as! String? 
       workout.tuesdayNameCD = DayName.text! 
       workout.tuesdayCodeNameCD = CodeNameTextField.text! 
       workout.tuesdayFocusCD = IconImageTextField.text! 
       workout.tuesdayTask01 = Task01TextField.text! 
       workout.tuesdayTask02 = Task02TextField.text! 
       workout.tuesdayTask03 = Task03TextField.text! 
       workout.tuesdayTask04 = Task04TextField.text! 
       workout.tuesdayTask05 = Task05TextField.text! 
       workout.tuesdayTask06 = Task06TextField.text! 
       workout.tuesdayTask07 = Task07TextField.text! 
       workout.tuesdayTask08 = Task08TextField.text! 
       workout.tuesdayTask09 = Task09TextField.text! 
       workout.tuesdayTask10 = Task10TextField.text! 
      } 
     } 
    } catch { 
     print("Error with request: \(error)") 
    } 
    saveToCoreData() { 
     self.navigationController!.popToRootViewController(animated: true) 
    } 
} 

func saveToCoreData(completion: @escaping()->Void){ 
    managedObjectContext!.perform { 
     do { 
      try self.managedObjectContext?.save() 
      completion() 
      print("Product saved to CoreData") 
     } catch let error { 
      print("Could not save Product to CoreData: \(error.localizedDescription)") 
     } 
    } 
} 

var managedObjectContext: NSManagedObjectContext? { 
    return (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 
} 

func getContext() -> NSManagedObjectContext { 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    return appDelegate.persistentContainer.viewContext 
} 

答えて

0

あなたのforループの中には、既に管理オブジェクトworksがあります。新しいWorkoutを作成する代わりに、値を更新するだけです。

関連する問題