我已将一个子项目作为静态库添加到我的主项目中。
现在,在主项目上,我正在尝试加载子项目包中的内容。像这样的东西:
NSString *defaultStorePath =
[[NSBundle bundleForClass:[self class]] pathForResource:@"database" ofType:@"sqlite"];
但这是返回零......
我该如何解决?
我已将一个子项目作为静态库添加到我的主项目中。
现在,在主项目上,我正在尝试加载子项目包中的内容。像这样的东西:
NSString *defaultStorePath =
[[NSBundle bundleForClass:[self class]] pathForResource:@"database" ofType:@"sqlite"];
但这是返回零......
我该如何解决?
A-live给出了答案,但他太谦虚了,无法在此处发布作为答案。
这是答案的链接 http://www.galloway.me.uk/tutorials/ios-library-with-resources/
问题正是因为创建静态库时不包含资源。
试试这样的..
NSString *resourceBundlePath = [[NSBundle mainBundle]
pathForResource:@"StaticLibrary"
ofType:@"bundle"];
NSBundle *resourceBundle = [NSBundle bundleWithPath:resourceBundlePath];
现在,您可以将此 resourceBundle 用作静态库包。
我遇到了类似的问题,在我的情况下,甚至 bundleWithIdentifier 出于某种原因返回了 nil。如果没有其他工作,您可以随时尝试遍历所有文件,如下所示。这对我有用。
[self urlForResource:@"database.sqlite"];
// ...
- (NSURL *)urlForResource:(NSString *)resource
{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *directoryURL = [NSBundle bundleForClass:[self class]].bundleURL;
NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtURL:directoryURL includingPropertiesForKeys:nil options:0 errorHandler:^BOOL(NSURL *url, NSError *error) {
return YES;
}];
for (NSURL *url in enumerator)
{
NSString *lastPathComponent = [[url absoluteString] lastPathComponent];
if ([lastPathComponent isEqual:resource])
return url;
}
return nil;
}