iOS Swift Parse:重新加载表视图适用于更新,但在添加新项目时则不适用



我在tableViewController中使用这些行:

override func viewDidAppear(animated: Bool) {
        // Refresh the table to ensure any data changes are displayed
        self.tableView.reloadData()
}

当我编辑数据并返回到表视图时,我可以看到我所做的更改,因为重新加载似乎发生了。

当我添加新数据时(我使用与编辑时相同的保存方法),我返回到上一个表视图,但新条目没有出现。但它们肯定会保存在解析中。

我想知道,为什么添加和编辑之间有区别?当对两者使用相同的代码时?并使用相同的 IBAction 进行保存?

这是我的保存方法:

@IBAction func saveNewCard(sender: AnyObject) {
    // set up data
    self.cardObject["front"] = self.frontTextArea.text
    self.cardObject["back"] = self.backTextArea.text
    self.cardObject.setObject(cardSetObject, forKey: "cardset") // Setting the pointer
    println(cardObject)
    self.cardObject.saveEventually { (success, error) -> Void in
        if(error == nil){
            println(success)
            // Return to table view
            self.navigationController?.popViewControllerAnimated(true)
        }else{
            println(error.userInfo)
        }
    }
}

viewDidLoad()我决定它是一个新的(添加)还是现有的(编辑)对象:

var cardObject: PFObject! // if edit - I get the object transported via segue
override func viewDidLoad() {
    super.viewDidLoad()
    if (self.cardObject != nil){
        // edit
        self.navigationItem.title = "Edit"
        self.frontTextArea.text = self.cardObject["front"] as String
        self.backTextArea.text = self.cardObject["back"] as String

    }else{
        // add new
        self.navigationItem.title = "Add"
        self.cardObject = PFObject(className:"Card")
    }
}

这是我的cellForRowAtIndexPath

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier("cardCell", forIndexPath: indexPath) as CardTableViewCell
        // card object
        let cardObject: PFObject = self.cardObjects.objectAtIndex(indexPath.row) as PFObject
        var front = cardObject["front"] as String
        var back = cardObject["back"] as String
        cell.frontLabel.text = front
        cell.backLabel.text = back

        return cell;
    }

如果您使用的是导航控制器,请使用以下内容:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Get the new view controller using [segue destinationViewController].
    if([[segue destinationViewController] class] == [self class]){
        [self.tableView reloadData];
    }
}

最新更新