1

我正在尝试进行快速测试以将文件同步到 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 不能为 nil。

在此处获取普遍存在的 URL 后,将立即调用运行此逻辑的方法:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
ubiquityContainerURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];

if (ubiquityContainerURL != nil)
     [self writeAllBytesToLocalFile:@""];
});

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

谢谢大家的时间:)

4

1 回答 1

1

好吧,所以我弄清楚了问题所在。UIDocument 实例文档试图在其初始化方法中将文件扩展名附加到最终路径。

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

所以无论如何其他人遇到这个问题,你可以尝试删除你的自定义覆盖方法,看看是否能解决问题:)

于 2012-09-26T11:06:16.343 回答