CloudKit执行

时间:2016-12-20 10:44:15

标签: ios cloudkit

我的应用程序中存在CloudKit问题。最初加载视图时,数据会完美加载。但当我"拉到刷新"我得到了一个致命错误:索引超出范围"。奇怪的是,Code中没有任何区别(至少对我而言)。 当我拉动刷新时,它甚至没有运行"执行" (" B"不打印)。 调试器不会显示任何错误。

你有线索吗?

提前致谢!

尼科

viewDidLoad中

loadCloudData()

handlePullToRefresh

func handlePullToRefresh() {
    loadCloudData()
}

loadCloudData

func loadCloudData() {
        DispatchQueue.main.async {
            self.showMessage(titleText: NSLocalizedString("Loading ...", comment: "SwiftMessage Loading Title"), text: NSLocalizedString("Loading PixelCodes from Cloud", comment: "SwiftMessage Loading Title"), backgroundColor: UIColor.tileYellow(), textColor: UIColor.darkGray, image: #imageLiteral(resourceName: "cloud"))
        }

        dataCloud = [CKRecord]()
        let query = CKQuery(recordType: PixelCodeType.recordType, predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
        query.sortDescriptors = [NSSortDescriptor(key: "title", ascending: true)]

        print("A")

        databasePublic.perform(query, inZoneWith: nil) { (results:[CKRecord]?, error:Error?) in
            print("B")
            if error != nil {
                print("PixelCode from Cloud not Loaded!\n\(error!.localizedDescription)")
                self.couldLoadCloadData = false
                DispatchQueue.main.async {
                    SwiftMessages.hideAll()

                    if self.refreshControl != nil {
                        if self.refreshControl!.isRefreshing {
                            self.refreshControl!.endRefreshing()
                        }
                    }

                    //"Cloud" active
                    self.segmentedControl.setEnabled(true, forSegmentAt: 1)
                }
                self.handleError(title: NSLocalizedString("Error!", comment: "SwiftMessage error title"), text: error!.localizedDescription, errorTitle: "Cloud Loading Error:loadCloudData()", error: error)
            } else {
                if let data = results {
                    print("pixelCodes updated")
                    self.dataCloud = data

                    if results!.isEmpty {
                        self.couldLoadCloadData = true
                        self.isCloudDataLoaded = false
                    } else {
                        self.couldLoadCloadData = true
                        self.isCloudDataLoaded = true
                    }

                    self.uploadTimes()

                    DispatchQueue.main.async {
                        if self.refreshControl != nil {
                            if self.refreshControl!.isRefreshing {
                                self.refreshControl!.endRefreshing()
                            }
                        }
                        SwiftMessages.hideAll()

                        //"Cloud" active
                        self.segmentedControl.setEnabled(true, forSegmentAt: 1)

                        self.tableView.reloadData()
                    }
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

loadCloudData函数执行的第一件事是将dataCloud数组设置为空数组,但不要在tableview上调用reloadData以便项目数量在数组中,tableview 认为在项目中的项目数是不同的。

清除阵列或清除阵列后,应该调用reloadData