1

のようなバンドルを作成しようとしました

CFBundleRef bundleRef = CFBundleCreate(kCFAllocatorDefault, (CFURLRef)@"/Users/MyUser/source/Mybundle.component");

しかし、SIGABRTを取得しました

NSBundle* myBundle = [[NSBundle alloc]initWithPath:@"/Users/MyUser/source/Mybundle.component"];

しかしゼロになりました。どうすれば適切に行うことができますか?前に Mybundle.component ディレクトリを作成する必要がありますか?

4

1 に答える 1

1

のようなバンドルを作成しようとしました

CFBundleRef bundleRef = CFBundleCreate(kCFAllocatorDefault, (CFURLRef)@"/Users/MyUser/source/Mybundle.component");

しかし、SIGABRTを取得しました

これは、文字列が CFURL オブジェクトではないためです。CFBundleCreateには URL オブジェクトが必要であり、手を振って「これは完全に CFURL オブジェクトです」と伝えるだけでは、そのパスを 1 つにすることはできません。実際に CFURL または NSURL オブジェクトを作成し、そこに渡す必要があります。

適切な関数/メソッドを使用していることを確認してください。パスから URL を作成する場合、Cocoa ではfileURLWithPath:, notが必要ですURLWithString:(後者は、パスではなく URL を表す文字列を想定しています)。CFには、これらのそれぞれに対応する機能があります。

NSBundle* myBundle = [[NSBundle alloc]initWithPath:@"/Users/MyUser/source/Mybundle.component"];

しかしゼロになりました。… 前に Mybundle.component ディレクトリを作成する必要がありますか?

空のディレクトリがバンドルとして受け入れられるとは考えていませんが、バンドル オブジェクトを作成する前に、そのパス (または CF の URL) にバンドルが既に存在している必要があります。

プログラムでゼロからディスク上にバンドルを作成する場合は、 NSFileWrapperの使用を検討してください。

于 2013-06-07T18:46:30.940 に答える