所以我正在构建一个笔记应用程序,并尝试了一切,但无法解决这个问题。我有3 UIViewController
个。当您点击第一个UIViewController
上的按钮时,它会将您射到第三个按钮,其中包含UITextView
,UITextField
和静态UILabel
,其中包含一些更新信息。当您填写这些字段并点击后退按钮时,它会将您带到第二个视图控制器,该控制器是一个使用此信息进行更新的表。
问题是:当我点击UITableViewCell
时,它会将信息加载回第三个视图控制器,以便用户可以编辑他的笔记,但当我回到UITableView
时,它会创建一个全新的单元格而不仅仅是更新旧单元格。
如果我可以使用我发回的相同对象更新我的数组,我认为这个问题会解决,但我不知道如何做到这一点。谢谢你的帮助!
VC2 - 这就是我将数据从tableView发送到textView Back
的方式override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let nextView = segue.destinationViewController as! TextViewController
guard let indexPath = self.tableView.indexPathForSelectedRow else {
print("Didnt work")
return
}
let dataToSendBackToBeEdited = textViewObjectData[indexPath.row]
print(dataToSendBackToBeEdited.dreamText)
print(dataToSendBackToBeEdited.dreamTitle)
print(dataToSendBackToBeEdited.dreamType)
print(dataToSendBackToBeEdited.description)
print(dataToSendBackToBeEdited)
nextView.objectSentFromTableViewCell = dataToSendBackToBeEdited
}
这就是我保存用户点击回到tableView
的信息的方法func determineSave() {
guard var savedDreamArray = NSKeyedUnarchiver.unarchiveObjectWithFile(TextViewController.pathToArchieve.ArchiveURL.path!) as? [Dream] else {
//First dream object saved
let dreamObject = Dream(dreamTitle: titleForDream.text!, dreamType: typeOfDreamLabel.text!, dreamText: textView.text, currentDate: NSDate())
dreamArray.append(dreamObject)
NSKeyedArchiver.archiveRootObject(dreamArray, toFile: pathToArchieve.ArchiveURL.path!)
return
}
//print(savedDreamArray.count)
//print(savedDreamArray.first!.dreamTitle)
let dreamObject = Dream(dreamTitle: titleForDream.text!, dreamType: typeOfDreamLabel.text!, dreamText: textView.text!, currentDate: NSDate())
savedDreamArray.append(dreamObject)
NSKeyedArchiver.archiveRootObject(savedDreamArray, toFile: pathToArchieve.ArchiveURL.path!)
}
答案 0 :(得分:2)
我也有这个问题。来到这里,得到了答案。阵列!
我也附加了数组,这显然导致重复的单元格出现。
我再次将数组重置为空,然后再次检索数据并重新加载表。
我使用的是Firebase,因此我的代码如下所示:
DataService.instance.dateProfileRef.observeEventType(FIRDataEventType.Value) { (snapshot: FIRDataSnapshot)
in
//have to clear the array here first before reloading the data. otherwise you get duplicates
self.posts = [] //added this line
if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshot {
let snapUserID = (snap.childSnapshotForPath("userID").value!)
if snapUserID as? String == USER_ID {
if let profileDict = snap.value as? Dictionary<String, AnyObject> {
let key = snap.key
let post = Post(postKey: key, postData: profileDict)
self.posts.append(post)
答案 1 :(得分:0)
您在阵列上执行.append()
,这将添加一个新单元格。
您必须找到要更新的对象的索引,然后分配它:
array[index] = newObject