【问题标题】:Using UIDocument saveToUrl throws an NSInvalidArgumentException on NSURL使用 UIDocument saveToUrl 在 NSURL 上抛出 NSInvalidArgumentException
【发布时间】:2012-09-26 09:41:34
【问题描述】:

我正在尝试进行快速测试以将文件同步到 iCloud。这是我的简单 sn-p:

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:@""];
});

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

感谢大家的宝贵时间:)

【问题讨论】:

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


    【解决方案1】:

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

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

    因此,无论如何其他人遇到此问题,您都可以尝试删除您的自定义覆盖方法,看看是否可以解决问题:)

    【讨论】:

    • 覆盖savingFileType的正确方法是什么?
    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    相关资源
    最近更新 更多