首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSPersistentCloudKitContainer抛出调试/错误消息

NSPersistentCloudKitContainer抛出调试/错误消息
EN

Stack Overflow用户
提问于 2022-11-16 08:38:54
回答 1查看 55关注 0票数 0

概述

  • 当我使用NSPersistentCloudKitContainer时,我会得到以下打印在Xcode调试区域上的错误/调试消息。
  • 我已登录iCloud,并正在设备上进行测试。
  • 同步似乎很好
  • 我仍在使用开发(尚未部署到生产中)
  • 通过使用通过启用CloudKit coredata同步生成的默认代码,我尝试了一个新项目,但仍然得到相同的消息。

打印在Xcode调试区域上的错误/调试消息

代码语言:javascript
复制
CoreData: debug: CoreData+CloudKit: -[PFCloudKitOptionsValidator validateOptions:andStoreOptions:error:](36): Validating options: <NSCloudKitMirroringDelegateOptions: 0x600000760510> containerIdentifier:<MyContainerID> databaseScope:Private ckAssetThresholdBytes:<null> operationMemoryThresholdBytes:<null> useEncryptedStorage:NO useDeviceToDeviceEncryption:NO automaticallyDownloadFileBackedFutures:NO automaticallyScheduleImportAndExportOperations:YES skipCloudKitSetup:NO preserveLegacyRecordMetadataBehavior:NO useDaemon:YES apsConnectionMachServiceName:<null> containerProvider:<PFCloudKitContainerProvider: 0x600003764210> storeMonitorProvider:<PFCloudKitStoreMonitorProvider: 0x600003764220> metricsClient:<PFCloudKitMetricsClient: 0x600003764230> metadataPurger:<PFCloudKitMetadataPurger: 0x600003764240> scheduler:<null> notificationListener:<null> containerOptions:<null> defaultOperationConfiguration:<null> progressProvider:<NSPersistentCloudKitContainer: 0x60000205d200> test_useLegacySavePolicy:YES archivingUtilities:<PFCloudKitArchivingUtilities: 0x600003764250> bypassSchedulerActivityForInitialImport:NO
storeOptions: {
    NSInferMappingModelAutomaticallyOption = 1;
    NSMigratePersistentStoresAutomaticallyOption = 1;
    NSPersistentCloudKitContainerOptionsKey = "<NSPersistentCloudKitContainerOptions: 0x600003b3a190>";
    NSPersistentHistoryTrackingKey = 1;
    NSPersistentStoreMirroringOptionsKey =     {
        NSPersistentStoreMirroringDelegateOptionKey = "<NSCloudKitMirroringDelegate: 0x600000c642a0>";
    };
    NSPersistentStoreRemoteChangeNotificationOptionKey = 1;
}
CoreData: debug: CoreData+CloudKit: -[NSCloudKitMirroringDelegate observeChangesForStore:inPersistentStoreCoordinator:](416): <NSCloudKitMirroringDelegate: 0x600000c642a0>: Observing store: <NSSQLCore: 0x14080aec0> (URL: file:///Users/<my home folder>/Library/Group%20Containers/group.<app name>/<filename>.sqlite)
CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _setUpCloudKitIntegration](562): <NSCloudKitMirroringDelegate: 0x600000c642a0>: Successfully enqueued setup request.
CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate checkAndExecuteNextRequest](3209): <NSCloudKitMirroringDelegate: 0x600000c642a0>: Checking for pending requests.
CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate checkAndExecuteNextRequest]_block_invoke(3222): <NSCloudKitMirroringDelegate: 0x600000c642a0>: Executing: <NSCloudKitMirroringDelegateSetupRequest: 0x600001643f20> D3975DD0-1198-40F2-9D6A-B9994B9710B6
CoreData: debug: CoreData+CloudKit: -[PFCloudKitMetadataModelMigrator calculateMigrationStepsWithConnection:error:](446): Skipping migration for 'ANSCKDATABASEMETADATA' because it already has a column named 'ZLASTFETCHDATE'

问题:

  1. 这些是我的错误吗?我错过了什么吗?
  2. 或者这些可以被忽视吗?
  3. 我应该向苹果公司提交反馈/错误信息吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-20 14:27:48

我的应用程序使用CoreData & CloudKit有一段时间了。起初,我也担心所有的调试器日志,但现在我忽略了其中的大多数日志。这项工作如下:

scheme/Run/Arguments/Arguments Passed On Launch中添加和检查

代码语言:javascript
复制
-com.apple.CoreData.CloudKitDebug 0  
-com.apple.CoreData.Logging.stderr 0  

对特定日志的一些评论:

CoreData: debug: CoreData+CloudKit: -[PFCloudKitOptionsValidator validateOptions:显然只是有关同步设置的信息。

如所报告的CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _setUpCloudKitIntegration]:,同步设置已成功地排队,并将在以后处理。

CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate checkAndExecuteNextRequest]:只是关于同步进程的活动的信息。

CoreData: debug: CoreData+CloudKit: -[PFCloudKitMetadataModelMigrator calculateMigrationStepsWithConnection:似乎是CoreDate & CloudKit集成之前已经完成过的信息,并且不需要为某一列设置特定的设置。

很长一段时间以来,我忽略了所有这些日志,而且我的CoreData & CloudKit的工作时间最多,没有任何报告的错误。

编辑:

您可以检查是否存在“真正的”同步错误:我注册NSPersistentCloudKitContainer.Event通知(请参阅文档),并将同步事件记录在

代码语言:javascript
复制
    var currentPersistentCloudKitContainerEvents: [NSPersistentCloudKitContainer.Event] = []
//…
        NotificationCenter.default.addObserver(forName: NSPersistentCloudKitContainer.eventChangedNotification, object: nil, queue: .main) { notification in
            guard let event = notification.userInfo?[NSPersistentCloudKitContainer.eventNotificationUserInfoKey] as? NSPersistentCloudKitContainer.Event else { return }
            let eventID = event.identifier
            let eventType = event.type
            var eventTypeString: String
            switch eventType {
                case .setup:  eventTypeString = "setup "
                case .import: eventTypeString = "import"
                case .export: eventTypeString = "export"
                @unknown default: eventTypeString = "unknown"
            }

            // Check if the event has already been recorded
            let alreadyRecordedEvent = self.currentPersistentCloudKitContainerEvents.first(where: { $0.identifier == eventID} )
            var index: Int
            if let recordedEvent = alreadyRecordedEvent {
                index = self.currentPersistentCloudKitContainerEvents.firstIndex(of: recordedEvent)!
                self.currentPersistentCloudKitContainerEvents[index] = event
            } else {
                index = self.currentPersistentCloudKitContainerEvents.count
                self.currentPersistentCloudKitContainerEvents.append(event)
                syncLog.log("Started:   \(eventTypeString, privacy: .public), ID: \(eventID, privacy: .public), now in progress: \(self.currentPersistentCloudKitContainerEvents.count, privacy: .public)")
            }
            let recordedEvent = self.currentPersistentCloudKitContainerEvents[index]
            
            if event.endDate != nil {
                // The event finished successfully or with error
                if recordedEvent.succeeded {
                    syncLog.log("Succeeded: \(eventTypeString, privacy: .public), ID: \(eventID, privacy: .public), now in progress: \(self.currentPersistentCloudKitContainerEvents.count - 1, privacy: .public)")
                } else {
                    syncLog.error("Did not succeed: \(eventTypeString, privacy: .public), ID: \(eventID, privacy: .public), now in progress: \(self.currentPersistentCloudKitContainerEvents.count - 1, privacy: .public)")
                    if let error = event.error {
                        self.handleError(error)
                    }
                }
                // Delete the terminated event
                self.currentPersistentCloudKitContainerEvents.remove(at: index)
                return
            }
            
        }  

同步错误是那些没有成功的事件。但这样的事件当然可以再试一次。

我偶尔会遇到一个“真实”的错误。

代码语言:javascript
复制
2022-11-21 08:01:51.456355+0100 ShopEasy![61491:2995577] [error] error: CoreData+CloudKit: -[NSCloudKitMirroringDelegate resetAfterError:andKeepContainer:]  

但CoreData & CloudKit似乎正在复苏。

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

https://stackoverflow.com/questions/74457409

复制
相关文章

相似问题

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