UIDocument 的非 iCloud 使用

Posted

技术标签:

【中文标题】UIDocument 的非 iCloud 使用【英文标题】:Non-iCloud use of UIDocument 【发布时间】:2012-04-19 12:10:04 【问题描述】:

当用户禁用 iCloud 时,我正在尝试使用没有 iCloud 的 UIDocument。我有以下代码:

NSURL *url;
if (_isiCloudEnabled) 
    NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
    url = [ubiq URLByAppendingPathComponent:[NSString stringWithFormat:@"%f.adoc",[[NSDate date] timeIntervalSince1970]]];
 else 
    NSString *homeDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *newFilePath = [homeDirectoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%f.adoc", [[NSDate date] timeIntervalSince1970]]];
    url = [NSURL URLWithString:newFilePath];


ASListyDocument *d = [[ASListyDocument alloc] initWithFileURL:url];

这段代码给了我错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'must pass a valid file URL to -[UIDocument initWithFileURL:]'

任何想法为什么?我查看了调试器中的 URL - 它看起来是有效的。我尝试在模拟器和手机上运行它 - 同样的问题!

顺便说一句,我正在运行 ios 5.0 的设备,以防万一。

【问题讨论】:

【参考方案1】:

这很可能是您正在构建的 URL

NSString *homeDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *newFilePath = [homeDirectoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%f.adoc", [[NSDate date] timeIntervalSince1970]]];
url = [NSURL URLWithString:newFilePath];

实际上不是 URL,而是路径。不要忘记一个有效的 URL 需要一个方案;对于文件,这是“file://”。尝试使用 [NSURL fileURLWithPath:] 构建文件 URL

url = [NSURL fileURLWithPath:newFilePath];

【讨论】:

非常感谢!这解决了它!

以上是关于UIDocument 的非 iCloud 使用的主要内容,如果未能解决你的问题,请参考以下文章

同步打开 UIDocument

如何更新 UIDocument 数据

使用 NSFileWrapper 在 UIDocument 中存储 BOOL

增量读取 UIDocument 时使用哪个线程来执行异步文件访问使用块

如何在主队列上加载 UIDocument?

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