Обновлено: Мой FIXSwift - TableView с помощью PLIST не перезаряжать после добавления новых данных
Это то, что фиксированная моя проблема, и это может помочь вам!
override func viewDidAppear(animated: Bool) {
authors = loadPlist()
tableView.reloadData()
}
Теперь загружает данные отлично :)
У меня возникли проблемы с моим кодом. У меня есть plist, который я изменяю и добавляю записи.
Все работает нормально, но мне нужно перезапустить iOS-симулятор, чтобы увидеть вновь добавленные записи plist.
Чтобы быстро суммировать, все обновляется в файле plist, но для этого требуется, чтобы приложение было перестроено.
Я пробовал tableView.reloadData(), но я понимаю, что как только viewDidLoad() запускается только один раз.
Теперь я попытался обойти это, создав дополнительные соединения Segue назад и четвертым, но я нашел этот счетчик продуктивным и громоздким.
Большое спасибо!
P.S
У меня есть чувство, что я не сохраняющееся данные правильно?
Как получить информацию из списка свойств, при создании копии:
private func loadPlist() -> NSArray {
var data = NSArray()
// attempt to open "authors.plist" from the application's Documents/ directory
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
as NSArray
let documentsDirectory = paths.objectAtIndex(0) as! NSString
let path = documentsDirectory.stringByAppendingPathComponent("authors.plist")
let fileManager = NSFileManager.defaultManager()
// if the file is not available (first access), then open it from the app's
// mainBundle Resources/ folder:
if(!fileManager.fileExistsAtPath(path)) {
let plistPath = NSBundle.mainBundle().pathForResource("authors", ofType: "plist")
data = NSArray(contentsOfFile: plistPath!)!
do {
try fileManager.copyItemAtPath(plistPath!, toPath: path)
} catch let error as NSError {
// failure
print("Error copying plist file: \(error.localizedDescription)")
}
print("First launch... Default plist file copied...")
data.writeToFile(path, atomically: true)
}
else {
data = (NSArray(contentsOfFile: path))!
}
return data
}
Для сохранения данных:
func saveData(){
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
as NSArray
let documentsDirectory = paths.objectAtIndex(0) as! NSString
let path = documentsDirectory.stringByAppendingPathComponent("authors.plist")
if let plistArray = NSMutableArray(contentsOfFile: path) {
//...
//...
plistArray.writeToFile(path, atomically: false)
}
}
кнопки Сохранить:
@IBAction func saveDataButton(sender: UIBarButtonItem) {
saveData()
navigationController?.popViewControllerAnimated(true)
}
Как я заселение моего TableView :
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath)
if let author = authors[indexPath.row] as? [String: AnyObject], let name = author["Author"] as? String {
// Configure Cell
cell.textLabel?.text = name
}
return cell;
мой viewDidLoad() теперь:
override func viewDidLoad() {
super.viewDidLoad()
title = "Authors"
authors = loadPlist()
tableView.registerClass(UITableViewCell.classForCoder(), forCellReuseIdentifier: cellIdentifier)
tableView.delegate = self;
tableView.dataSource = self;
tableView.reloadData()
}
Извините, что вы переполняете стоп и не спать: P – Th30
@ Th30 В реализации делегата datasource datasource в tableview, как вы определяете, сколько строк вы возвращаете, также я думаю, вы можете быть смущены тем, как работает метод reloadData, он может быть вызван как много раз, как вы хотите, и по звукам этого, это то, что вы ищете –