Ios CloudKit执行

Ios CloudKit执行,ios,cloudkit,Ios,Cloudkit,我的应用程序中存在CloudKit问题。最初加载视图时,数据会完全加载。但当我“拉刷新”时,我得到一个“致命错误:索引超出范围”。奇怪的是,代码上并没有区别(至少对我来说是这样)。 当我拉刷新时,它甚至不运行“perform”(“B”不会被打印)。 调试器不显示任何错误 你有线索吗 提前谢谢 尼科 viewDidLoad: loadCloudData() func handlePullToRefresh() { loadCloudData() } func loadCloudData

我的应用程序中存在CloudKit问题。最初加载视图时,数据会完全加载。但当我“拉刷新”时,我得到一个“致命错误:索引超出范围”。奇怪的是,代码上并没有区别(至少对我来说是这样)。 当我拉刷新时,它甚至不运行“perform”(“B”不会被打印)。 调试器不显示任何错误

你有线索吗

提前谢谢

尼科

viewDidLoad

loadCloudData()
func handlePullToRefresh() {
    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()
func handlePullToRefresh() {
    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()
func handlePullToRefresh() {
    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
数组设置为空数组,但不在tableview上调用
reloadData
,因此数组中的项数和tableview认为在数组中的项数是不同的

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

我删除了“dataCloud=[CKRecord]()”,一切正常!我不知道为什么我没有考虑把它拿走。谢谢!!!