使用 setUbiquitous 为 UIDocument 文件关闭 iCloud 同步时出错(LibrarianErrorDomain 错误 2)

Posted

技术标签:

【中文标题】使用 setUbiquitous 为 UIDocument 文件关闭 iCloud 同步时出错(LibrarianErrorDomain 错误 2)【英文标题】:Error (LibrarianErrorDomain error 2) when turning iCloud sync off for a UIDocument file with setUbiquitous 【发布时间】:2011-12-17 21:53:19 【问题描述】:

当我尝试为 UIDocument 文件关闭 iCloud 同步时遇到错误。想知道是否有其他人遇到过这种情况。这是场景:

我在应用沙箱中本地创建一个 UIDocument 文件,然后进行以下调用以开始将文件与 iCloud 同步:

[[NSFileManager defaultManager] setUbiquitous:YES itemAtURL:localPathURL destinationURL:cloudPathURL error:&error];

一切都很顺利。

现在我想停止此文件的 iCloud 同步。

我首先通过调用以下命令确保文件至少已与 iCloud 同步:

- (BOOL) isDataFileSyncedWithCloud

    if (![self isICloudSupported] || ![self isUsingICloudForFiles])
        return NO;

    NSURL* file = [self getFileURLToCloudDatafile];
    NSNumber*  isInCloudNum = nil;

    if ([file getResourceValue:&isInCloudNum forKey:NSURLIsUbiquitousItemKey error:nil])
    
        // If the item is in iCloud, see if it is downloaded and uploaded.
        if ([isInCloudNum boolValue])
        
            NSNumber*  isDownloadedNum = nil;
            if ([file getResourceValue:&isDownloadedNum forKey:NSURLUbiquitousItemIsDownloadedKey error:nil])
            
                NSNumber* isUploadedNum = nil;
                if ([file getResourceValue:&isUploadedNum forKey:NSURLUbiquitousItemIsUploadedKey error:nil])
                                    
                    return ([isDownloadedNum boolValue] && [isUploadedNum boolValue]);
                
            
        
    

    return NO;

上面返回YES,表示文件已经同步(或者我是这么认为的......)

所以,现在我继续拨打下面的电话以停止此文件的 iCloud 同步:

[[NSFileManager defaultManager] setUbiquitous:NO itemAtURL:localPathURL destinationURL:cloudPathURL error:&error];

我收到以下错误:“操作无法完成。(LibrarianErrorDomain 错误 2 - 无法禁用未同步项目的同步。)”

知道为什么会发生此错误以及如何摆脱它吗?我还以为我的文件已经完全同步了……

提前致谢!

【问题讨论】:

【参考方案1】:

我想通了。为了禁用 iCloud 同步,我不小心调用了:

[[NSFileManager defaultManager] setUbiquitous:NO itemAtURL:localPathURL destinationURL:cloudPathURL error:&error];

而不是

[[NSFileManager defaultManager] setUbiquitous:NO itemAtURL:cloudPathURL destinationURL:localPathURL error:&error];

【讨论】:

以上是关于使用 setUbiquitous 为 UIDocument 文件关闭 iCloud 同步时出错(LibrarianErrorDomain 错误 2)的主要内容,如果未能解决你的问题,请参考以下文章

SetUbiquitous 为不存在的文件显示“文件已存在”

iOS 未调用 UIDocumentPickerDelegate 方法(didPickDocumentsAt)

哪些 iCloud 任务是自动完成的?

现有的 UIDocument 不会在 iCloud 上更新

没有网络/互联网时将文档保存到 iCloud

使用ffmpeg libavcodec将视频流编码为H264,为啥持续时间为零