在tableview中加倍UITableViewCell

时间:2015-10-24 21:33:01

标签: ios swift core-data synchronization icloud

我在我的应用中使用iCloud Sync与coredata结合使用。有时会发生我的tableView中的数据显示2或3次,所以如果我有2个单元格,则显示4或6个单元格,每个第2个单元格具有相同的内容。有人知道为什么会这样,以及如何解决这个问题?

我的代码:

func persistentStoreDidChange() {

    //load data
    //tableView.reloadData()
    loadData()
}

func persistentStoreWillChange(notification:NSNotification) {

    actvityIndicator.hidden = false
    icloudSyncLabel.hidden = false
    actvityIndicator.startAnimating()

    tableView.userInteractionEnabled = false
    textField.userInteractionEnabled = false

    let moc = self.fetchedResultsController.managedObjectContext
    //disable UI (changes in progress)
    managedObjectContext?.performBlock{ () -> Void in
        if moc.hasChanges {
            var error: NSError? = nil
            if moc.save(&error) {
                abort()
            }
            else{
                moc.reset()
            }
        }
    }
}


func recieveICloudChanges(notification:NSNotification) {

    let moc = self.fetchedResultsController.managedObjectContext
    moc.performBlock { () -> Void in

        moc.mergeChangesFromContextDidSaveNotification(notification)
        self.loadData()
    }

    tableView.userInteractionEnabled = true
    textField.userInteractionEnabled = true

    actvityIndicator.hidden = true
    icloudSyncLabel.hidden = true
    actvityIndicator.stopAnimating()
}

1 个答案:

答案 0 :(得分:0)

您的托管对象上下文看起来有点奇怪。在..WillChange..中,您获得对获取结果控制器的托管对象上下文moc的引用,但您在不同(可选)上下文中使用块API,可能是类实例变量。你需要澄清

  • 如果可选上下文不是nil
  • 如果可选上下文与获取的结果控制器的上下文相同(即moc