2016-04-05 7 views
1

私はリマインダーアプリを構築しています。左にスワップするとリマインダを削除して更新できます。下の図のようにeditボタンを押すと、データベースからデータを読み込むので、データを編集して更新することができますが、代わりに新しいreminderを作成するように動作します。すぐにローアクションでデータベースからデータをロードする方法

どのように行アクションのサイズを変更できますか。

ReminderTable.swift

override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? { 

     let deleteAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Delete",handler: { (action, indexPath) -> Void in 


      if let managedObjectContext = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext { 

       let reminderToDelete = self.fetchResultController.objectAtIndexPath(indexPath) as! ReminderData 
       managedObjectContext.deleteObject(reminderToDelete) 

       do { 
        try managedObjectContext.save() 
       } catch { 
        print(error) 
       } 
      } 
     }) 


     let editAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Edit",handler: { (action, indexPath) -> Void in 

       let st:UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
       let vc :UINavigationController = st.instantiateViewControllerWithIdentifier("Reminder") as! UINavigationController 
       self.presentViewController(vc, animated: true, completion: nil) 

     }) 


     deleteAction.backgroundColor = UIColor.redColor() 
     editAction.backgroundColor = UIColor.blueColor() 
     return [deleteAction,editAction] 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "Reminder" { 

      let task = segue.destinationViewController as! Reminder 


      let indexpath = self.tableView.indexPathForSelectedRow 

      let row = indexpath?.row 

      task.reminders = reminders[row!] 

     } 
    } 

Reminder.swift私はiOSの開発でちょっとまだ事前に

おかげで初心者だ

override func viewDidLoad() { 
     super.viewDidLoad() 

    dateTextField.delegate = self 
    nameTextField.delegate = self 



    if let reminderContent = reminders 

    { 

     nameTextField.text = reminderContent.name 
     dateTextField.text = reminderContent.stringForDate() 
     timePick.date = reminderContent.time! 
     } 

     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = "MM-dd-yyyy" 
     dateFormatter.stringFromDate(reminderContent.date!) 

     let timeFormatter = NSDateFormatter() 
     timeFormatter.dateFormat = "hh:mma" 
      timeFormatter.stringFromDate(reminderContent.time!) 

    } 

func inserte(){ 

     let storingName = nameTextField.text 

     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = "MM-dd-yyyy" 
     let date = dateFormatter.dateFromString(dateTextField.text!) 

     if reminders == nil { 

      if let managedObjectContext = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext { 
       reminders = NSEntityDescription.insertNewObjectForEntityForName("Reminder", inManagedObjectContext: managedObjectContext) as? ReminderData 

       reminders!.name = storingName! 
       reminders.date = date 
       reminders.time = timePick.date 



       do { 
        try managedObjectContext.save() 
       } catch { 
        print(error) 
        return 
       } 
      } 


     } 
    } 

ノート

enter image description here

答えて

0

あなたは私たちに重要なコードを表示していません。あなたはReminder View Controllerで何をしていますか?

リマインダーVCのリマインダプロパティを選択した行に設定していますが、このコードは期待通りに動作していますか?

リマインダビューコントローラでは、フォームを持っていると思いますが、viewDidLoad/viewDidAppearでプロパティを設定していますか?フォームを構築し、データの検証を処理し、(管理対象オブジェクトコンテキストに保存するようにする必要がありので、この機能を内蔵されていない

func viewDidLoad(animated:Bool) { 
    Super.viewDidLoad(animated:animated) 

    DescriptionTextField.text = reminder.description 
    LocationTextField.text = reminder.location 
    // ... And so on, filling out each property on your model 
} 

私は何かのように見ることを期待します

githubのコードを見て、私はそれを更新して、変更を更新し、これをテーブルビューで表示するように通知しました。

必要な主な変更がされた:ここ

// near the top of the file.. 
var reminder:ReminderData? 

// then further down 
func update(){ 

    let storingName = nameTextField.text 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "MM-dd-yyyy" 
    let date = dateFormatter.dateFromString(dateTextField.text!) 


    let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 


    if let reminder = reminder { 
     reminder.name = storingName 
     if let categoryStorage = storingCategory { 
      reminder.category = categoryStorage 
     } 

     reminder.date = date 
     reminder.time = timePick.date 

     do { 
      try managedObjectContext.save() 

     } catch let error as NSError { 
      print("ERROR in update: \(error)") 
     } 
    } 

    self.navigationController?.popViewControllerAnimated(true) 

} 

主な変更は再びリマインダをフェッチしようとしていない、あなたはとてもそれを再度フェッチする必要がいけないeditVCにかけmanagedObject(リマインダー)を通過してきました。値を更新して保存するだけです。

また、フェッチしていたときに、すべてのレコードをフェッチしていました。このようにしたい場合は、リマインダーIDをリマインダーVCに渡し、IDでロードして変更して保存します。これを行うには、IDフィールドを追加し、フェッチを更新して述語を含める必要がありますが、今のところそれは必要ありません。

+0

**私のアプリの動作に加えて、セルを押すだけで、** Reminder.swift **上で私の投稿の外観を更新しました。問題なくデータをロードしました。行アクションによって新しいリマインダーが作成されます – User

+0

変更を保存するコードはどこにありますか? – Scriptable

+0

** Reminder.swift **を見て、もう一度コードを更新しました。** ReminderTable.swift ** – User

関連する問題