捆绑静态图书馆

时间:2013-04-09 11:31:53

标签: iphone ios ipad cocoa-touch cocoa

我已将子项目作为静态库添加到我的主项目中。

现在,在主项目上,我正在尝试加载子项目包上的内容。像这样:

NSString *defaultStorePath =
[[NSBundle bundleForClass:[self class]] pathForResource:@"database" ofType:@"sqlite"];

但是这回来了......

我该如何解决?

3 个答案:

答案 0 :(得分:4)

A-live给出了答案,但他太谦虚了,不能在这里作为答案发布。

以下是答案的链接 http://www.galloway.me.uk/tutorials/ios-library-with-resources/

问题恰恰是因为创建静态库时不包含资源。

答案 1 :(得分:1)

尝试这样的事情......

    NSString *resourceBundlePath = [[NSBundle mainBundle]       
                   pathForResource:@"StaticLibrary" 
                                       ofType:@"bundle"];

    NSBundle *resourceBundle = [NSBundle bundleWithPath:resourceBundlePath];

现在,您可以将此resourceBundle用作静态库包。

答案 2 :(得分:0)

我有类似的问题,在我的情况下,甚至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;
}