使用UIDocument saveToUrl在NSURL上抛出NSInvalidArgumentException

时间:2012-09-26 09:41:34

标签: objective-c ios icloud uidocument invalid-argument

我正在尝试快速测试将文件同步到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:@""];
});

我尝试了一些不同的东西来修复它,但它一直在发生。知道问题可能是什么吗?

谢谢大家的时间:)

1 个答案:

答案 0 :(得分:1)

好吧所以我弄清楚问题是什么。 UIDocument实例 doc 正试图在其initialize方法中将文件扩展名附加到最终路径。

不幸的是,我以不正确的方式覆盖了我的UIDocument子类中的 - (NSString)savingFileType 方法,这使得它返回一个nil字符串到initialize方法,因此尝试附加一个nil NSString对象到文件路径。

因此,在任何情况下,其他人遇到此问题,您可以尝试删除自定义覆盖方法,看看是否能解决问题:)