首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CloudKit执行

CloudKit执行
EN

Stack Overflow用户
提问于 2016-12-20 10:44:15
回答 1查看 71关注 0票数 1

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

你有线索吗?

提前感谢!

尼科

viewDidLoad

代码语言:javascript
复制
loadCloudData()

handlePullToRefresh

代码语言:javascript
复制
func handlePullToRefresh() {
    loadCloudData()
}

loadCloudData

代码语言:javascript
复制
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()
                    }
                }
            }
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-20 11:26:07

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41240435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档