dictionaryWithContentsOfFile和Sandbox

时间:2014-06-27 11:55:56

标签: cocoa sandbox

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

编辑: 我现在正在尝试书签数据解决方案,我重新审核了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;
}

1 个答案:

答案 0 :(得分:0)

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

使用NSURLBookmarkCreationWithSecurityScope作为选项。

此NSData对象应该存储在某个地方(plist?),当您想要在以后的会话中再次读取该文件时,您可以使用+[NSURL URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:]

从书签数据创建符合沙箱的NSURL