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