简体   繁体   English

导致iOS iCloud错误的原因:错误Domain = BRCloudDocsErrorDomain Code = 12“操作无法完成。”延迟后重试:60

[英]What causes iOS iCloud error: Error Domain=BRCloudDocsErrorDomain Code=12 “The operation couldn’t be completed.” Retrying after delay: 60

The iPhone/iOS app is using CoreData + SQLite (NSSQLiteStoreType) + iCloud iOS. iPhone / iOS应用程序使用CoreData + SQLite(NSSQLiteStoreType)+ iCloud iOS。 When the app starts on first install (or after deleting and reinstalling via xcode), and there is prior app data in iCloud from a prior installation or from other devices in the same account, the following error occurs, then a 60 second retry delay, then a successful migration to iCloud. 当应用程序在首次安装时启动时(或通过xcode删除并重新安装后),并且先前安装或同一帐户中的其他设备在iCloud中存在先前的应用程序数据时,会发生以下错误,然后是60秒的重试延迟,然后成功迁移到iCloud。 The result is that user of the app thinks that their data is lost when the app is upgraded. 结果是应用程序的用户认为在升级应用程序时他们的数据会丢失。 However, after the 60 second delay, the data is restored. 但是,在60秒延迟之后,数据将恢复。 The error and some code follows. 错误和一些代码如下。

What causes this error? 是什么导致这个错误? Where can I learn more about this error? 在哪里可以了解有关此错误的更多信息?

[4972:2014294] CoreData: iCloud: Error: initial sync notification returned an error (Error Domain=BRCloudDocsErrorDomain Code=12 "The operation couldn't be completed. (BRCloudDocsErrorDomain error 12.)") [4972:2014294] CoreData:iCloud:错误:初始同步通知返回错误(错误域= BRCloudDocsErrorDomain Code = 12“操作无法完成。(BRCloudDocsErrorDomain错误12))”

[4972:2014294] -PFUbiquitySetupAssistant finishSetupWithRetry:: CoreData: Ubiquity: : Retrying after delay: 60 Error Domain=BRCloudDocsErrorDomain Code=12 "The operation couldn't be completed. (BRCloudDocsErrorDomain error 12.)" [4972:2014294] -PFUbiquitySetupAssistant finishSetupWithRetry :: CoreData:Ubiquity ::延迟后重试:60 Error Domain = BRCloudDocsErrorDomain Code = 12“操作无法完成。(BRCloudDocsErrorDomain error 12.)”

Here is a code snippet and more detailed log to provide more context. 这是一个代码片段和更详细的日志,以提供更多上下文。

From the app delegate: 来自app委托:

        - (void)applicationDidFinishLaunching:(UIApplication *)application { 

            ... standard iCloud and app setup ...

            NSManagedObjectContext *context = [self managedObjectContext];

            ...

            ... query the db ...
        }

        /**
         Returns the managed object context for the application.
         If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application.
         */
        - (NSManagedObjectContext *) managedObjectContext {

            if (managedObjectContext != nil) {
                return managedObjectContext;
            }

            NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
            if (coordinator != nil) {
                managedObjectContext = [[NSManagedObjectContext alloc] init];
                [managedObjectContext setPersistentStoreCoordinator: coordinator];
            }
            managedObjectContext.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy;  
            return managedObjectContext;
        }

        ...

        /**
         Returns the managed object model for the application.
         If the model doesn't already exist, it is created by merging all of the models found in the application bundle.
         */
        - (NSManagedObjectModel *)managedObjectModel {

            if (managedObjectModel != nil) {
                return managedObjectModel;
            }
            managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];    
            return managedObjectModel;
        }

        ...

        /**
         Returns the persistent store coordinator for the application.
         If the coordinator doesn't already exist, it is created and the application's store added to it.
         */
        - (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

            if (persistentStoreCoordinator != nil) {
                return persistentStoreCoordinator;
            }




            NSURL *storeUrl = [NSURL fileURLWithPath: [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES) lastObject] stringByAppendingPathComponent: @"myapp.sqlite"]];

            NSLog(@"App Store URL : %@", storeUrl);

            NSError *error = nil;
            persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];


            NSDictionary *storeOptions;
            storeOptions = @{
                             NSMigratePersistentStoresAutomaticallyOption : @YES,
                             NSInferMappingModelAutomaticallyOption : @YES,
                             NSPersistentStoreUbiquitousContentNameKey: @"AppCloudStore"
                             };
            #ifdef FREE
            storeOptions = @{
                             NSMigratePersistentStoresAutomaticallyOption : @YES,
                             NSInferMappingModelAutomaticallyOption : @YES,
                             NSPersistentStoreUbiquitousContentNameKey: @"FreeAppCloudStore"
                             };
            #endif

            // Register for Notifications
            NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];

            [notificationCenter addObserver:self
                                   selector:@selector(storesDidChange:)
                                       name:NSPersistentStoreCoordinatorStoresDidChangeNotification
                                     object:self.persistentStoreCoordinator];

            [notificationCenter addObserver:self
                                   selector:@selector(persistentStoreDidImportUbiquitousContentChanges:)
                                       name:NSPersistentStoreDidImportUbiquitousContentChangesNotification
                                     object:self.persistentStoreCoordinator];

            [notificationCenter addObserverForName:NSPersistentStoreCoordinatorStoresWillChangeNotification
             object:self.persistentStoreCoordinator
             queue:[NSOperationQueue mainQueue]
             usingBlock:^(NSNotification *note) {
                 NSLog(@"Stores Will Change...");

                     if ([self.managedObjectContext hasChanges]) {
                         NSError *saveError;
                         if (![self.managedObjectContext save:&saveError]) {
                             NSLog(@"Save error: %@", saveError);
                         }
                     } else {
                         // drop any managed object references
                         [self.managedObjectContext reset];
                     }

             }];


            NSPersistentStore *store = [persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl  options:storeOptions error:&error];

            if (store == nil || error != nil) {
                NSLog(@"Error: %@, %@", error, [error userInfo]);
                abort();
            }


            NSURL *finaliCloudURL = [store URL];
            NSLog(@"Created persistent store okay.  Final iCloud URL is: %@", finaliCloudURL);

            return persistentStoreCoordinator;
        }

    ...

    - (void)persistentStoreDidImportUbiquitousContentChanges:(NSNotification *)notification {

        NSLog(@"persistentStoreDidImportUbiquitousContentChanges: Called.  Content has changed via Core Data iCloud: *******************************************");

            // Received and merge updates from iCloud
            [self.managedObjectContext mergeChangesFromContextDidSaveNotification:notification];
            [self notifyAndRefreshAllDataDueToCloudEvent];
    }

    ...

    - (void)storesDidChange:(NSNotification *)notification {

        // Tell me: why did my stores changes?
        NSNumber *transitionType = [notification.userInfo objectForKey:NSPersistentStoreUbiquitousTransitionTypeKey];
        int theCause = [transitionType intValue];

        NSLog(@"storesDidChange: NSPersistentStoreCoordinatorStoresDidChange Notification = %@", notification);

        switch (theCause) {
            case NSPersistentStoreUbiquitousTransitionTypeAccountAdded: {
                NSLog(@"storesDidChange: Account Added");
                // account was added
            }
                break;
            case NSPersistentStoreUbiquitousTransitionTypeAccountRemoved: {
                NSLog(@"storesDidChange: Account Removed");
                // account was removed
            }
                break;
            case NSPersistentStoreUbiquitousTransitionTypeContentRemoved: {
                NSLog(@"storesDidChange: Content Removed");
                // content was removed
            }
                break;
            case NSPersistentStoreUbiquitousTransitionTypeInitialImportCompleted: {
                NSLog(@"storesDidChange: Initial Import:");
                // initial import
            }
                break;

            default:
                break;

        }

    ... 

        [[NSNotificationCenter defaultCenter]
         postNotificationName:@"*****DidChangeByPersistentStoreChangesNotification"
         object:self];

        [[NSNotificationCenter defaultCenter]
         postNotificationName:@"*****DidChangeByPersistentStoreChangesNotification"
         object:self];

        [[NSNotificationCenter defaultCenter]
         postNotificationName:@"*****DidChangeByPersistentStoreChangesNotification"
         object:self];

    }

More Detailed Log: 更详细的日志:

2015-05-12 10:22:23.367 [4972:2014228] storesDidChange: NSPersistentStoreCoordinatorStoresDidChange Notification = NSConcreteNotification 0x17005f470 {name = NSPersistentStoreCoordinatorStoresDidChangeNotification; object = <NSPersistentStoreCoordinator: 0x170072100>; userInfo = {
    added =     (
        "<NSSQLCore: 0x12dd100b0> (URL: file:///var/mobile/Containers/Data/Application/****/Documents/CoreDataUbiquitySupport/mobile~****-7B78C4F2FDB2/FreeAppCloudStore/2***/store/app.sqlite)"
    );
}}
2015-05-12 10:22:23.409 [4972:2014228] -[PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](808): CoreData: Ubiquity:  mobile~****:FreeAppCloudStore
Using local storage: 1
2015-05-12 10:22:23.410 [4972:2014228] Created persistent store okay.  Final iCloud URL is: file:///var/mobile/Containers/Data/Application/****/store/app.sqlite
2015-05-12 10:22:23.477 [4972:2014228] AppTableViewController:viewWillAppear: enter
2015-05-12 10:22:23.478 [4972:2014228] getSharedAdBannerView: enter
2015-05-12 10:22:23.518 [4972:2014228] queryDidUpdate: MSMetadataQuery Notification: - NSMetadataQueryDidFinishGatheringNotification
2015-05-12 10:22:23.519 [4972:2014228] queryDidUpdate: NSMetadataQuery returned 25 results
2015-05-12 10:22:23.524 [4972:2014228] setProcessTimer: 15.000000
2015-05-12 10:22:23.531 [4972:2014228] TableViewController:viewDidAppear: enter
2015-05-12 10:22:23.531 [4972:2014228] TableViewController:loadData (or reload): enter
2015-05-12 10:22:23.582 [4972:2014294] CoreData: iCloud: Error: initial sync notification returned an error (Error Domain=BRCloudDocsErrorDomain Code=12 "The operation couldn't be completed. (BRCloudDocsErrorDomain error 12.)")
2015-05-12 10:22:23.594 [4972:2014294] -[PFUbiquitySetupAssistant finishSetupWithRetry:](826): CoreData: Ubiquity:  <PFUbiquitySetupAssistant: 0x12de18940>: Retrying after delay: 60
Error Domain=BRCloudDocsErrorDomain Code=12 "The operation couldn't be completed. (BRCloudDocsErrorDomain error 12.)"
2015-05-12 10:22:23.854 [4972:2014228] didFailToReceiveAdWithError
2015-05-12 10:22:55.150 [4972:2014228] bannerViewDidLoadAd
2015-05-12 10:23:24.178 [4972:2014228] queryDidUpdate: MSMetadataQuery Notification: - NSMetadataQueryDidUpdateNotification
2015-05-12 10:23:24.178 [4972:2014228] queryDidUpdate: NSMetadataQuery returned 25 results
2015-05-12 10:23:25.039 [4972:2014228] Stores Will Change...
2015-05-12 10:23:25.101 [4972:2014228] storesDidChange: NSPersistentStoreCoordinatorStoresDidChange Notification = NSConcreteNotification 0x170254940 {name = NSPersistentStoreCoordinatorStoresDidChangeNotification; object = <NSPersistentStoreCoordinator: 0x170072100>; userInfo = {
    NSPersistentStoreUbiquitousTransitionTypeKey = 4;
    added =     (
        "<NSSQLCore: 0x12dd100b0> (URL: file:///var/mobile/Containers/Data/Application/****/FreeAppCloudStore/20EF5D1C-4748-4AB2-BCE1-91B228437D77/store/app.sqlite)"
    );
    removed =     (
        "<NSSQLCore: 0x12dd100b0> (URL: file:///var/mobile/Containers/Data/Application/*****/store/app.sqlite)"
    );
}}
2015-05-12 10:23:25.101 [4972:2014646] -[PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](808): CoreData: Ubiquity:  mobile~*****FreeAppCloudStore
Using local storage: 0

I hope my answer can save a lot of time for those who run into this error. 我希望我的回答能为那些遇到这个错误的人节省很多时间。

This error occurs when the time between the removal and installation of the application is less than a certain interval. 当应用程序的删除和安装之间的时间小于某个间隔时,会发生此错误。 I dont know whether it is the same as for me, mine was 15 seconds. 我不知道它是否与我相同,我的是15秒。

Silly mistake, a waste of a few hours. 傻错,浪费了几个小时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 AFNetworking Error Domain = NSPOSIXErrorDomain Code = 12“操作无法完成。无法分配内存 - AFNetworking Error Domain=NSPOSIXErrorDomain Code=12 "The operation couldn’t be completed. Cannot allocate memory Error Domain = NSCocoaErrorDomain代码= 512“该操作无法完成。该操作无法完成。是一个目录 - Error Domain=NSCocoaErrorDomain Code=512 "The operation couldn’t be completed.The operation couldn’t be completed. Is a directory Twitter消息发布问题(请求失败,错误:错误域= HTTP代码= 410“此操作无法完成。在ios应用中 - Twitter message posting issue ( Request failed with error: Error Domain=HTTP Code=410 "The operation couldn’t be completed. in ios app Voip应用程序IOS收到错误错误域= NSPOSIXErrorDomain代码= 61“该操作无法完成。连接被拒绝 - Voip app IOS getting error Error Domain=NSPOSIXErrorDomain Code=61 "The operation couldn’t be completed. Connection refused 如何修复“无法加载资源:操作无法完成。 iOS 12 视频中的协议错误? - How to fix 'Failed to load resource: The operation couldn't be completed. Protocol Error" in iOS 12 Video? 分析器错误错误域= NSXMLParserErrorDomain代码= 4“无法完成操作。” - Parser error Error Domain=NSXMLParserErrorDomain Code=4 “The operation couldn’t be completed.” Error Domain = HMErrorDomain代码= 4“操作无法完成。 (HMErrorDomain错误4。)” - Error Domain=HMErrorDomain Code=4 “The operation couldn’t be completed. (HMErrorDomain error 4.)” 错误:错误域= NSCocoaErrorDomain代码= 3840“该操作无法完成。 - Error:Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. didFailWithError:错误域= kCLErrorDomain代码= 0“无法完成操作。 (kCLErrorDomain错误0。)“ - didFailWithError: Error Domain=kCLErrorDomain Code=0 “The operation couldn’t be completed. (kCLErrorDomain error 0.)” 错误域= NSCocoaErrorDomain代码= 3840“操作无法完成。(可可错误3840.) - Error Domain = NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM