2012-01-11 42 views
2

我的應用程序加載了一些自定義包,它希望使用這些包中的資源。Cocoa - 從非主包中加載資源

看來,這是不可能的從主包實例獲得資源,如[一個NSBundle mainBundle] pathForResource:ofType:]。

所以我用+替換[:ofType:inDirectory:一個NSBundle pathForResource]和它工作得很好。但是資源加載代碼應該知道「inDirectory:」的包路徑是相當不方便的。如果捆綁包移動到另一個路徑,它將不起作用。

有沒有其他方法可以解決這個問題?謝謝!

回答

1

我不完全確定你要完成什麼,但是如果你想加載一個束資源而不使用束的直接路徑,你可以使用[NSBundle bundleForClass:][NSBundle bundleWithIdentifier:]。一旦你有你想要的包的實例的引用,您可以通過以下方式訪問其內容:

NSBundle myBundle = [NSBundle bundleWithIdentifier:@"com.my.identifier"]; 
[myBundle pathForResource:@"myResource" ofType:@"type"]; 

如果你希望它仍然是準確的捆綁移動後,也可能是一個棘手的問題。正如文檔所述,「NSBundle對象表示文件系統中的一個位置......」。如果該位置移動,那麼捆綁包實例仍將查看現有位置。我認爲你需要找出另一種機制來確定bundle是否被移動並從新的位置重新創建你的NSBundle實例。

+0

這正是我想要的!我忘了捆綁包有ID本身.. – notgeek 2012-01-14 05:09:21