【问题标题】:dictionaryWithContentsOfFile and SandboxdictionaryWithContentsOfFile 和沙盒
【发布时间】:2014-08-18 12:41:51
【问题描述】:

我创建了一个从用户选择的文件夹加载 xml 文件的 mac 应用程序,在使用该应用程序后,用户保存了一个自定义文件 (.adgf) 当我尝试加载在一条记录中具有 xml 路径的 .adgf 文件(即 plist 文件)时,我调用 dictionaryWithContentsOfFile 但它给我一个“零”。我认为问题出在沙盒上(有时它有时会起作用)。字符串路径是正确的。 也许当用户加载 xml 文件时,我应该保存在特定应用程序“文档文件夹”中吗?

编辑: 我现在正在尝试 Bookmark Data 解决方案,并且我 retraive 一个 NSURL 但它不起作用。我使用的代码是这样的:

- (NSData *)bookmarkFromURL:(NSURL *)url {
NSError *error = nil;
NSData *bookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
                 includingResourceValuesForKeys:NULL
                                  relativeToURL:NULL
                                          error:&error];
if (error) {
    NSLog(@"Error creating bookmark for URL (%@): %@", url, error);
    [NSApp presentError:error];
}

return bookmark;
}

- (NSURL *)urlFromBookmark:(NSData *)bookmark {
NSURL *url = [NSURL URLByResolvingBookmarkData:bookmark
                                       options:NSURLBookmarkResolutionWithSecurityScope
                                 relativeToURL:NULL
                           bookmarkDataIsStale:NO
                                         error:NULL];
return url;
}

【问题讨论】:

    标签: cocoa sandbox


    【解决方案1】:

    在用户存储文件后,您应该使用从 URL 获取书签数据 -[NSURL bookmarkDataWithOptions: includingResourceValuesForKeys: relativeToURL: error:]

    使用NSURLBookmarkCreationWithSecurityScope 作为选项。

    这个 NSData 对象应该存储在某个地方(plist?),当您想在以后的会话中再次读取该文件时,您可以使用 +[NSURL URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:] 从书签数据创建一个符合沙盒的 NSURL

    【讨论】:

    • 我确信您在这里写的指示是正确的,但我尝试过但没有成功。我可以用 NSData 保存 NSURL 并用正确的 NSURL 但是 [NSDictionary dictionaryWithContentsOfURL:bookmarkedUrl];总是给我一个零。
    • 您还说“在用户存储文件之后”,您的意思是在用户保存自定义文件(.adgf)之后我必须调用bookmarkDataWithOptions?但是,如果用户将此文件保存在桌面上并且 plist 文件位于另一个目录中,我可以通过 NSURL 使用 URLByResolvingBookmarkData 访问 plist 文件吗?
    • 用户保存文件后,您必须调用bookmarkDataWithOptions。我认为保存的文件(.adgf)是 plist? plist 是如何创建的?
    • 用户打开应用程序,加载 plist 和图像文件,因此我创建了存储在 NSData 中的书签。当用户使用 .adgf 文件保存工作时,我在其中写入 NSData 书签的名称,因此我应该能够检索之前加载的 plist 和图像的书签。当我加载回 .adgf 文件但是当我执行 mainDictionary = [NSDictionary dictionaryWithContentsOfURL:bookmarkedUrlPlist];这是零
    • 您还需要为 .adgf 文件添加书签,因为该文件未保存在您的应用沙箱中。
    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 2014-10-03
    • 2011-05-31
    相关资源
    最近更新 更多