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 使用的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSFileWrapper 在 UIDocument 中存储 BOOL
增量读取 UIDocument 时使用哪个线程来执行异步文件访问使用块
使用 setUbiquitous 为 UIDocument 文件关闭 iCloud 同步时出错(LibrarianErrorDomain 错误 2)