我已經將一個子項目添加爲我的主項目的靜態庫。來自Static LIbrary的包
現在,在主項目上,我試圖加載一些子項目的包上的東西。事情是這樣的:
NSString *defaultStorePath =
[[NSBundle bundleForClass:[self class]] pathForResource:@"database" ofType:@"sqlite"];
但這回零...
我該如何解決呢?
我已經將一個子項目添加爲我的主項目的靜態庫。來自Static LIbrary的包
現在,在主項目上,我試圖加載一些子項目的包上的東西。事情是這樣的:
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];
現在,你可以使用這個資源包爲您的靜態庫包。
我有類似的問題,在我的情況下,即使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;
}
那麼'[NSBundle bundleWithIdentifier:...]與你的子包的CFBundleIndentifier有什麼關係呢? – 2013-04-09 11:38:20
我沒有特別創建這個包。我在哪裏可以找到包標識符?簡單的事情在Xcode上很複雜。 – SpaceDog 2013-04-09 11:42:51
是否將「database.sqlite」複製到應用程序包?它位於捆綁包內的什麼位置? – 2013-04-09 11:48:08