1

私はファイルパスとさまざまなタイプのさまざまな組み合わせを試して髪を引き裂いてきましたが、基本的に私がやろうとしているのは、リソースフォルダー内にある「test」というフォルダーをコピーすることです。

NSPasteBoard絶対パス(例:/ Users / dw / src / Menulet)を指定すると、フォルダーのコピーが機能しますが、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で確実に実行できるようにする場合は、ファインダーを使用してフォルダーを作成し、プロジェクトにドラッグします。次のオプションを確認してください。

ここに画像の説明を入力してください

このようにして、フォルダが実際に作成され、バンドルにも追加されます。

アップデート2

ディレクトリをプロジェクトフォルダ内に移動して適切な場所に配置するのではなく、ディレクトリがバンドルにコピーされている場合は、バンドル内の任意の場所に配置してください。

そうすると、バンドルがすべてを管理します。したがって、次を使用してディレクトリを検索するだけです。

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

だからあなたの場合:

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