gpt4 book ai didi

macos - 如何创建要保存到新文档的文档范围书签?

转载 作者:行者123 更新时间:2023-12-03 16:21:56 24 4
gpt4 key购买 nike

我有一个基于沙盒文档的 Mac 应用程序。我的文档包含用户计算机上的图像。我想将文档范围的书签保存到文档中使用的图像,以便在关闭并重新打开文档时可以访问该图像。

以下是我创建书签的方法:

 //path is path to an image
//for a new document docUrl is set to the location where we will save our document
NSURL * pathUrl = [NSURL fileURLWithPath:path];
NSError * error;
NSData * pathBookmarkData = [pathUrl bookmarkDataWithOptions:
(NSURLBookmarkCreationWithSecurityScope
| NSURLBookmarkCreationSecurityScopeAllowOnlyReadAccess)
includingResourceValuesForKeys:[NSArray arrayWithObject:NSURLPathKey]
relativeToURL:docUrl error:&error];

这会导致以下错误:

Error Domain=NSCocoaErrorDomain Code=260 "The file “Untitled.mydocext” couldn’t be opened because there is no such file." (Collection URL points to a file that doesn't exist) UserInfo=0x608000070800 {NSURL=file:///Users/myname/Pictures/Untitled.mydocext, NSDebugDescription=Collection URL points to a file that doesn't exist}

如何创建要保存到新文档的文档范围书签?

这是我获取路径的方法:

NSArray* fileTypes = [[NSArray alloc] initWithObjects:@"png", @"jpg", @"jpeg", @"bmp", @"gif", @"tif", @"tiff", @"PNG", @"JPG", @"JPEG", @"BMP", @"GIF", @"TIF", @"TIFF", nil];

NSOpenPanel *panel;

panel = [NSOpenPanel openPanel];
[panel setTitle:@"Select Photos"];

[panel setFloatingPanel:YES];

[panel setCanChooseDirectories:YES];
[panel setCanChooseFiles:YES];
[panel setAllowsMultipleSelection:YES];
[panel setAllowedFileTypes:fileTypes];

[panel beginWithCompletionHandler:^(NSInteger result){
if (result == NSFileHandlingPanelOKButton) {
NSMutableArray * pathsArray = [[NSMutableArray alloc] init];
NSArray * urlArray = [panel URLs];
for (NSURL * url in urlArray) {
//this is how I get path to image, assume I am not selecting directories
NSString * path = [url path];
}
}
}];

最佳答案

无需延迟SSB的创建。此外,传输到路径然后返回 URL 可能会导致沙箱出现一些问题。尝试使用以下内容:

    // the URLs come back with access to it. they are added to the sandbox by the panel. no need to do anything like start accessing security scoped.
NSArray * urlArray = [panel URLs];

for (NSURL *urlToStore in urlArray) {
// create a SSB out of the URL
NSError *erroer = nil;
NSData *bookmarkData = nil;
bookmarkData = [urlToStore bookmarkDataWithOptions:(NSURLBookmarkCreationWithSecurityScope| NSURLBookmarkCreationSecurityScopeAllowOnlyReadAccess)
includingResourceValuesForKeys:nil
relativeToURL:docUrl
error:&erroer];
if (erroer) {
NSLog(@"couldn't create NSURLBookmarkCreationWithSecurityScope with error: %@", [erroer description]);
} else if ( bookmarkData ) {
// store the bookmark data either in the document or internally for later persistency
} else {
NSLog(@"no error and no bookmarkData: %@", [self description]);
}
}

关于macos - 如何创建要保存到新文档的文档范围书签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27730384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com