CloudKit 执行

CloudKit perform

我的应用程序 CloudKit 有问题。最初加载视图时,数据会完美加载。但是当我 "Pull to Refresh" 我得到一个 "fatal error: Index out of range"。奇怪的是代码没有区别(至少对我而言)。 当我拉动刷新时,它甚至没有 运行 "perform"("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()
                    }
                }
            }
        }
    }

您的 loadCloudData 函数所做的第一件事是将 dataCloud 数组设置为空数组,但您没有在表视图上调用 reloadData,因此项目数在数组中和表视图 认为 在数组中的项目数不同。

您应该在清除数组或不清除数组后调用 reloadData