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 对象”不足以使该路径合二为一。您需要实际创建一个 CFURL 或 NSURL 对象并将其传递到那里。

确保使用正确的函数/方法。对于从路径创建 URL,在 Cocoa 中,您需要fileURLWithPath:,而不是URLWithString:(后者需要一个表示 URL 的字符串,而不是路径)。CF 具有与这些中的每一个相对应的功能。

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

但得到了零。... 我应该先创建 Mybundle.component 目录吗?

我不会指望一个空目录被接受为一个捆绑包,但您确实需要一个捆绑包已经存在于该路径(或 CF 中的 URL)中,然后才能为其创建捆绑包对象。

如果您希望以编程方式从头开始在磁盘上创建包,请考虑使用NSFileWrapper

于 2013-06-07T18:46:30.940 回答