2015-09-25 6 views
0

Я извлекаю некоторые данные из plist в UITableview. Я пытаюсь удалить выбранные данные, однако, когда я пытаюсь перезагрузить данные, чтобы показать только оставшиеся ячейки, приложение сработает. Я думаю, проблема в том, что я использую tableview.reloadData(), но я не уверен, как исправить эту проблему. Если я не использую reloadData, ячейка будет удалена при повторном открытии контроллера вида.Swift - tableview.reloadData() отключает приложение

Любой совет?

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 
     if editingStyle == UITableViewCellEditingStyle.Delete { 

      let row = indexPath.row 

      let plistPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray 
      let DocumentsDirectory = plistPath[0] as! String 
      let path = DocumentsDirectory.stringByAppendingPathComponent("notes.plist") 
      let fileManager = NSFileManager.defaultManager() 

      if (!fileManager.fileExistsAtPath(path)) { 

       if let bundlePath = NSBundle.mainBundle().pathForResource("notes", ofType: "plist") { 

        let resultDictionary = NSMutableDictionary(contentsOfFile: bundlePath) 
        println("Bundle notes.plist file is --> \(resultDictionary?.description)") 
        fileManager.copyItemAtPath(bundlePath, toPath: path, error: nil) 
        println("copy") 

       } else { 
        println("notes.plist not found") 
       } 


      } else { 
       println("note.plist already exists") 

       //fileManager.removeItemAtPath(path, error: nil) 
      } 

      let resultDictionary = NSMutableDictionary(contentsOfFile: path) 
      //resultDictionary?.removeAllObjects() 
      resultDictionary?.removeObjectForKey(allKeys[row]) 
      resultDictionary!.writeToFile(path, atomically: false) 

      println("Loaded notes.plist file is --> \(resultDictionary?.description)") 


      tableView.reloadData() 

     } 
    } 

enter image description here

+0

Предоставить подробную информацию о катастрофе. – rmaddy

+0

Ошибка приложения: «Неустранимая ошибка: неожиданно найден нуль при развертывании необязательного значения (lldb) ' – SNos

+0

На какой строке произошла эта ошибка? – rmaddy

ответ

2

О вызове reloadData(), документация говорит: «Это не должно быть названо в методах, вставлять и удалять строки, особенно в анимации блока реализованного с вызовами beginUpdates и endUpdates. " поэтому его лучше просто перезагрузить раздел, где вы сделали изменения и вызвать начало и конец, если анимация участвует

tableView.beginUpdates() 
tableView.reloadRowsAtIndexPaths(path, withRowAnimation: UITableViewRowAnimation.Automatic) 
tableView.endUpdates() 

, а также его предпочтительнее использовать свой собственный экземпляр nsfilemanager, так как один по умолчанию работает только в главном потоке , а также вы ненадежно разворачивания resultDictionary при записи в файл, что может привести к падению пса,

let path = DocumentDirectory.stringByAppendingPathComponent("notes.plist") 

заменяется stringByAppendingString п быстрых 2, просто FYI

+0

спасибо ... Я пытался, но получаю ошибку: не могу вызвать 'reloadRowsAtIndexPaths' с помощью списка аргументов типа '((String), withRowAnimation: UITableViewRowAnimation)' – SNos

Смежные вопросы