记录、区域不显示在仪表板和删除区域问题 CloudKit
Posted
技术标签:
【中文标题】记录、区域不显示在仪表板和删除区域问题 CloudKit【英文标题】:Records, Zone doesn't displayed in Dashboard and Delete Zone issue CloudKit 【发布时间】:2020-04-13 11:21:35 【问题描述】:我为privateCloudDatabase
创建了一个区域。
static var privateCloudDatabase: CKDatabase
let container = CKContainer(identifier: "iCloud.<bundle>")
return container.privateCloudDatabase
static func createZone()
let fetchZonesOperation = CKFetchRecordZonesOperation.fetchAllRecordZonesOperation()
fetchZonesOperation.fetchRecordZonesCompletionBlock =
(recordZones: [CKRecordZone.ID : CKRecordZone]?, error: Error?) -> Void in
guard error == nil else
return
for recordID in recordZones.keys
if recordID.zoneName == zoneName
print("Zone Already Created: \(recordID)")
else if recordID.zoneName == "_defaultZone"
print("Deafult Zone")
else
let customZone = CKRecordZone(zoneName: zoneName)
privateCloudDatabase.save(customZone) zone, error in
if let error = error
print("Zone creation error: \(String(describing: error))")
else
print("Zone created: \(String(describing: zone?.zoneID.zoneName))")
fetchZonesOperation.qualityOfService = .utility
privateCloudDatabase.add(fetchZonesOperation)
它运行成功,我收到一条成功消息,但创建的 Zone
没有显示在 CloudKit 仪表板中。它现在只显示_default
区域。
另一个问题与删除Zone
中的所有数据有关。为此,我使用了以下代码
let fetchZonesOperation = CKFetchRecordZonesOperation.fetchAllRecordZonesOperation()
fetchZonesOperation.fetchRecordZonesCompletionBlock =
(recordZones: [CKRecordZone.ID : CKRecordZone]?, error: Error?) -> Void in
guard error == nil else
return
guard let recordZones = recordZones else return
let deletionOperation = CKModifyRecordZonesOperation(recordZonesToSave: nil, recordZoneIDsToDelete: recordZones.keys.map $0 )
deletionOperation.modifyRecordZonesCompletionBlock = _, deletedZones, error in
guard error == nil else
let error = error!
print("Error deleting records.", error)
return
print("Records successfully deleted in this zone.")
fetchZonesOperation.qualityOfService = .userInitiated
privateCloudDatabase.add(fetchZonesOperation)
在这里,我既没有收到任何成功消息,也没有收到任何错误消息。我尝试从区域中删除所有数据的另一种方法是
let customZone = CKRecordZone(zoneName: zoneName)
let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: recordType, predicate: predicate)
privateCloudDatabase.perform(query, inZoneWith: customZone.zoneID) (records, error) in
if error == nil
for record in records!
removeRecord(record.recordID.recordName) record, error in
在这里,我收到了成功消息,但是当我尝试从区域中获取数据时,我得到了所有条目,这表明使用上述任何方法都没有删除数据。对这些查询有何建议?
【问题讨论】:
检查删除问题; ***.com/questions/61162395/… 【参考方案1】:每当我遇到莫名其妙的错误和 CloudKit 中没有数据更新时,通常是因为一些愚蠢的事情:
-
容器标识符中有错字,因此它与 CloudKit 上的错误数据库交互。
我在 Apple 设备上使用的帐户与我在 CloudKit 仪表板中登录的帐户不同。
您是否检查过 CloudKit 日志以确认这些操作正在影响您的数据库?
【讨论】:
好的。我将检查 cloudkit 仪表板,但删除记录呢?正如我所看到的,即使我成功删除了记录,在获取时我再次获取数据 对于帐户,管理员权限是否足以检查 cloudkit?以上是关于记录、区域不显示在仪表板和删除区域问题 CloudKit的主要内容,如果未能解决你的问题,请参考以下文章
如何从Google Cloud Compute中删除所有区域的实例组