【问题标题】:Doubled UITableViewCell in tableview表格视图中的 UITableViewCell 加倍
【发布时间】:2015-10-24 21:33:00
【问题描述】:

我在我的应用中将 iCloud 同步与 coredata 结合使用。有时,我的 tableView 中的数据会显示 2 或 3 次,因此如果我有 2 个单元格,则会显示 4 或 6 个单元格,并且每个第二个单元格都有相同的内容。有人知道为什么会发生这种情况以及如何解决这个问题吗?

我的代码:

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()
}

【问题讨论】:

    标签: ios swift core-data synchronization icloud


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢您的回答!我想过,但真的不知道我该如何解决。您能否举个例子,我如何检查可选上下文是否与获取的结果控制器的上下文相同?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多