2013-04-09 48 views
2

我已經將一個子項目添加爲我的主項目的靜態庫。來自Static LIbrary的包

現在,在主項目上,我試圖加載一些子項目的包上的東西。事情是這樣的:

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

但這回零...

我該如何解決呢?

+0

那麼'[NSBundle bundleWithIdentifier:...]與你的子包的CFBundleIndentifier有什麼關係呢? – 2013-04-09 11:38:20

+0

我沒有特別創建這個包。我在哪裏可以找到包標識符?簡單的事情在Xcode上很複雜。 – SpaceDog 2013-04-09 11:42:51

+0

是否將「database.sqlite」複製到應用程序包?它位於捆綁包內的什麼位置? – 2013-04-09 11:48:08

回答

1

嘗試這樣的事情..

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

    NSBundle *resourceBundle = [NSBundle bundleWithPath:resourceBundlePath]; 

現在,你可以使用這個資源包爲您的靜態庫包。

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; 
}