我尝试创建像
这样的包CFBundleRef bundleRef = CFBundleCreate(kCFAllocatorDefault, (CFURLRef)@"/Users/MyUser/source/Mybundle.component");
但得到了SIGABRT
和
NSBundle* myBundle = [[NSBundle alloc]initWithPath:@"/Users/MyUser/source/Mybundle.component"];
但是没有。我怎么能正确地做到这一点?我应该在之前创建Mybundle.component目录吗?
答案 0 :(得分: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。