1

我一直在尝试文件路径和不同类型的不同组合,但基本上我想做的是复制一个名为“test”的文件夹,该文件夹位于我的资源文件夹中。

当我给出一个绝对路径(例如:/Users/dw/src/Menulet)时,将文件夹复制到NSPasteBoard作品上,但是当我尝试使用我的 mainBundle 的资源路径时它不起作用。这是我目前拥有的代码:

NSString *resourceFolder = [[NSURL fileURLWithPath:[[NSBundle mainBundle]
                                          resourcePath]] absoluteString];

NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard];
[pboard declareTypes:[NSArray arrayWithObject:NSURLPboardType] owner:nil];

NSString *SDKPathString = [[NSString alloc] initWithFormat:@"%@test/",
                                                        resourceFolder];
NSURL *SDKPathURL = [[NSURL alloc] initWithString:SDKPathString];

[pboard writeObjects:[NSArray arrayWithObject:SDKPathURL]];

结果是找不到文件:

__CFPasteboardIssueSandboxExtensionForPath: error for [/Users/dw/Library/Developer/Xcode/DerivedData/Menulet-bvwpfkjlcufhxubvaxubgnubtfgi/Build/Products/Debug/Menulet.app/Contents/Resources/test]

如何复制目录?

问题截图

编辑: 问题仍然存在

4

1 回答 1

2

我的猜测是,'/'当你这样做时,你错过了一个角色:

NSString *SDKPathString = [[NSString alloc] initWithFormat:@"%@test/",
                                                    resourceFolder];

确实 resourceFolder 是一条路径,我通常使用这样的东西:

NSString* SDKPathString= [resourceFolder stringByAppendingPathComponent: @"test"];

即使在您的情况下,您也可以通过在 .'/'之前放置一个字符来简单地纠正错误"test"。但我认为这更容易记忆。

更新

不是说如果你创建一个组 Xcode 也会创建一个文件夹。如果您想确保 Xcode 这样做,请使用 finder 创建一个文件夹并将其拖到项目中。检查这些选项:

在此处输入图像描述

这样文件夹就被实际创建了,并且也被添加到了包中。

更新 2

您不应该尝试将项目文件夹中的目录移动到正确的位置,而是将其放在包中您想要的任何位置,前提是该目录已复制到包中。

一旦这样做,捆绑包将为您管理一切。所以只需使用以下命令搜索目录:

- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension;

所以在你的情况下:

NSBundle* bundle= [NSBundle mainBundle];
NSString *SDKPathString = [ bundle pathForResource: @"test" ofType: @""];
于 2013-01-16T20:42:10.020 回答