Iphone 来自静态库的包

Iphone 来自静态库的包,iphone,ios,ipad,cocoa-touch,cocoa,Iphone,Ios,Ipad,Cocoa Touch,Cocoa,我在主项目中添加了一个子项目作为静态库 现在,在主项目上,我尝试加载子项目包中的一些内容。大概是这样的: NSString *defaultStorePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"database" ofType:@"sqlite"]; 但这是归零 我该如何解决这个问题呢?试试这样的方法 NSString *resourceBundlePath = [[NSBundle mainBund

我在主项目中添加了一个子项目作为静态库

现在,在主项目上,我尝试加载子项目包中的一些内容。大概是这样的:

NSString *defaultStorePath =
[[NSBundle bundleForClass:[self class]] pathForResource:@"database" ofType:@"sqlite"];
但这是归零


我该如何解决这个问题呢?

试试这样的方法

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

    NSBundle *resourceBundle = [NSBundle bundleWithPath:resourceBundlePath];

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

A-live给出了答案,但他太谦虚了,没有把答案贴在这里

下面是答案的链接


这个问题正是因为在创建静态库时没有包含资源。

我也有类似的问题,在我的例子中,BundleWithiIdentifier出于某种原因返回了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;
}

如何使用子捆绑包的CbundleIndentifier
[NSBundle bundleWithiIdentifier:…]
呢?我没有特别创建此捆绑包。在哪里可以找到捆绑包标识符?简单的事情在Xcode上是复杂的。是否将“database.sqlite”复制到应用程序包中?它在捆绑包中的确切位置?database.sqlite被复制到捆绑包中。它位于MyBundle/MyBundle/coredata/database.sqlite中。您可以尝试按名称初始化包吗?Xcode不会自动为libs创建资源包,请浏览您的主包内容(在设备上或在
iphonesimulator
dir)以明确您有哪些文件,注意
iphonesimulator
可能包含您已经从项目中删除的文件。