记录、区域不显示在仪表板和删除区域问题 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中删除所有区域的实例组

无法使用 CloudKit 获取 sharedCloudDatabase 自定义区域中的记录

CloudKit公共数据库删除记录

为管理区域配置 react-router-dom 的问题

Cloud Bigtable:区域或区域服务

在 Screen 的读取区域显示记录