使用 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 为不存在的文件显示“文件已存在”