2016-04-05 4 views
1

Я создаю приложение напоминания, когда меняю налево, я могу удалить и обновить напоминание; когда я нажимаю на кнопку edit, как показано ниже, он предположительно загружает данные из базы данных, поэтому я могу редактировать и обновлять данные, но вместо этого он просто работает, как создание нового reminder.Как я могу загрузить данные из базы данных с помощью действий строки в swift

и как изменить размеры строк.

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

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 
       } 
      } 


     } 
    } 

обратите внимание, что я до сих пор своего рода новичок в развитии IOS

заранее спасибо

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) 

} 

Основное изменение здесь не пытается снова получать напоминания, вы прошли managedObject (памятка) по к editVC, так что не нужно получить его снова. поэтому вы просто обновляете значения и затем сохраняете их.

Также, когда вы делали выбор, вы делали все записи. Если вы хотите сделать это таким образом, вы, вероятно, перейдете через идентификатор напоминания к напоминанию VC, а затем загрузите его по идентификатору, измените и сохраните. для этого вам нужно добавить поле ID и обновить вашу выборку, чтобы включить предикат, но пока вам это не нужно.

+0

Я обновил свое сообщение выше на ** Reminder.swift **, кроме того, что мое приложение работает нормально, нажав на ячейку, данные просто загружены без проблем; но в результате действия строки он просто создает новое напоминание – User

+0

Где находится ваш код для сохранения изменений? – Scriptable

+0

посмотрите на ** Reminder.swift **, я снова обновил код, я считаю, что ошибка в ** ReminderTable.swift ** – User