我正在尝试快速测试将文件同步到iCloud。这是我的简单片段:
url = [[ubiquityContainerURL
URLByAppendingPathComponent: @"Documents"]
URLByAppendingPathComponent:@"test.txt"];
doc = [[CloudDocument alloc] initWithFileURL:url];
[doc saveToURL:[doc fileURL]
forSaveOperation:UIDocumentSaveForCreating
completionHandler:^(BOOL success) {
}];
现在我试着环顾四周,在其他教程中,这似乎是他们这样做的方式。问题是当代码运行时,抛出此异常(在[doc saveToURL]行):
'NSInvalidArgumentException',原因:' * - [NSURL URLByAppendingPathExtension:]:组件,组件或pathExtension不能为零。'
运行此逻辑的方法在获取ubiquity URL后立即被调用:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
ubiquityContainerURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
if (ubiquityContainerURL != nil)
[self writeAllBytesToLocalFile:@""];
});
我尝试了一些不同的东西来修复它,但它一直在发生。知道问题可能是什么吗?
谢谢大家的时间:)
答案 0 :(得分:1)
好吧所以我弄清楚问题是什么。 UIDocument实例 doc 正试图在其initialize方法中将文件扩展名附加到最终路径。
不幸的是,我以不正确的方式覆盖了我的UIDocument子类中的 - (NSString)savingFileType 方法,这使得它返回一个nil字符串到initialize方法,因此尝试附加一个nil NSString对象到文件路径。
因此,在任何情况下,其他人遇到此问题,您可以尝试删除自定义覆盖方法,看看是否能解决问题:)