mainbundle的作用和使用

原]NSBundle--獲取文件路徑

2012-6-29閱讀16207 評(píng)論0

     之前在初始化一個(gè)類的時(shí)候:TestViewController *viewcontroller=[[TestViewController alloc]initWithNibName:@"TestViewController" bundle:[NSBundle mainBundle]];不是很明白:[NSBundle mainBundle]的意思鸟缕。后來(lái)查閱資料后知道了它的作用盗冷,如下:

     bundle是一個(gè)目錄,其中包含了程序會(huì)使用到的資源. 這些資源包含了如圖像,聲音,編譯好的代碼,nib文件(用戶也會(huì)把bundle稱為plug-in). 對(duì)應(yīng)bundle,cocoa提供了類NSBundle.我們的程序是一個(gè)bundle. 在Finder中,一個(gè)應(yīng)用程序看上去和其他文件沒有什么區(qū)別. 但是實(shí)際上它是一個(gè)包含了nib文件,編譯代碼,以及其他資源的目錄. 我們把這個(gè)目錄叫做程序的main bundle。

通過使用下面的方法得到程序的main bundle

NSBundle *myBundle = [NSBundle mainBundle];

一般我們通過這種方法來(lái)得到bundle.如果你需要其他目錄的資源,可以指定路徑來(lái)取得bundle

NSBundle *goodBundle;

goodBundle = [NSBundle bundleWithPath:@"~/.myApp/Good.bundle"];

一旦我們有了NSBundle 對(duì)象,那么就可以訪問其中的資源了

NSBundle束弄屡,是一種特定的文件類型窍育,其中的內(nèi)容遵循特定的結(jié)構(gòu)缀蹄。

NSBundle的一個(gè)主要作用是 獲取Resources文件夾中的資源在辆。

    在編程中使用[NSData dataWithContentOfFile:@"foo"]的時(shí)候规揪,總是無(wú)法讀取正確的文件內(nèi)容。而使用[NSData dataWithContentOfFile:[[NSBundle mainBundle] pathForResource:@”foo” ofType:@”"]的時(shí)候就可以。

因?yàn)楫?dāng)使用相對(duì)路徑的時(shí)候瓣蛀,其實(shí)他相對(duì)的當(dāng)前目錄并不是程序運(yùn)行的目錄,而是“/”雷厂。只有使用[NSBundle mainBundle]來(lái)生成的路徑才是文件真正的路徑惋增。

在此記錄一下:在以后的開發(fā)中不直接使用任何相對(duì)路徑,而是使用經(jīng)過計(jì)算以后的絕對(duì)路徑改鲫。

一.獲取圖片

  1. NSString *path = [[NSBuddle mainBuddle] pathForResource:@"resourceName" oftype@"resourceType"];

    UIImage *image = [[UIImage imageWithContentsOfFile:path];

  2. UIImage *image = [UIImage imageNamed:@"imageName"];

二.獲取plist文件

NSArray *array =[[NSArrayalloc]initWithContentsOfFile:[[NSBundlemainBundle]pathForResource:@"name"ofType:@"plist"]];

NSDictionary *dict=[arrayobjectAtIndex:index];//將plist文件中的內(nèi)容轉(zhuǎn)換成字典

(????ω????)
NSBundle介紹
閱讀:232302011-09-22 17:51
標(biāo)簽:雜談
bundle是一個(gè)目錄,其中包含了程序會(huì)使用到的資源. 這些資源包含了如圖像,聲音,編譯好的代碼,nib文件(用戶也會(huì)把bundle稱為plug-in). 對(duì)應(yīng)bundle,cocoa提供了類NSBundle.
我們的程序是一個(gè)bundle. 在Finder中,一個(gè)應(yīng)用程序看上去和其他文件沒有什么區(qū)別. 但是實(shí)際上它是一個(gè)包含了nib文件,編譯代碼,以及其他資源的目錄. 我們把這個(gè)目錄叫做程序的main bundle
bundle中的有些資源可以本地化.例如,對(duì)于foo.nib,我們可以有兩個(gè)版本: 一個(gè)針對(duì)英語(yǔ)用戶,一個(gè)針對(duì)法語(yǔ)用戶. 在bundle中就會(huì)有兩個(gè)子目錄:English.lproj和French.lproj,我們把各自版本的foo.nib文件放到其中. 當(dāng)程序需要加載foo.nib文件時(shí),bundle會(huì)自動(dòng)根據(jù)所設(shè)置的語(yǔ)言來(lái)加載. 我們會(huì)在16章再詳細(xì)討論本地化
通過使用下面的方法得到程序的main bundle
NSBundle *myBundle = [NSBundle mainBundle];
一般我們通過這種方法來(lái)得到bundle.如果你需要其他目錄的資源,可以指定路徑來(lái)取得bundle
NSBundle *goodBundle;
goodBundle = [NSBundle bundleWithPath:@'~/.myApp/Good.bundle'];
一旦我們有了NSBundle 對(duì)象,那么就可以訪問其中的資源了
// Extension is optional
NSString *path = [goodBundle pathForImageResource:@'Mom'];
NSImage *momPhoto = [[NSImage alloc] initWithContentsOfFile:path];
bundle中可以包含一個(gè)庫(kù). 如果我們從庫(kù)得到一個(gè)class, bundle會(huì)連接庫(kù),并查找該類:
Class newClass = [goodBundle classNamed:@'Rover'];
id newInstance = [[newClass alloc] init];
如果不知到class名,也可以通過查找主要類來(lái)取得
Class aClass = [goodBundle principalClass];
id anInstance = [[aClass alloc] init];
可以看到, NSBundle有很多的用途.在這當(dāng)中, NSBundle負(fù)責(zé)(在后臺(tái))加載nib文件. 我們也可以不通過NSWindowController來(lái)加載nib文件, 直接使用NSBundle:
BOOL successful = [NSBundle loadNibNamed:@'About' owner:someObject];
注意噢, 我們指定了一個(gè)對(duì)象someObject作為nib的File's Owner
使用initWithContentsOfFile時(shí)诈皿,文件路徑的寫法 使用initWithContentsOfFile方法可以通過讀取一個(gè)文件的內(nèi)容來(lái)初始化對(duì)象。 但文件的路徑應(yīng)該怎么確定呢像棘? 可以使用NSBundle的對(duì)象來(lái)獲取稽亏。 例如當(dāng)前程序所在目錄下有個(gè)文件re.xml,我們要將該文件的內(nèi)容做為NSData的數(shù)據(jù)源來(lái)初始化一個(gè)NSData對(duì)象缕题,可以用下面的方法來(lái)實(shí)現(xiàn):
NSString *filePath = [[NSBundle mainBundle] pathForResouse:@'re' ofType:@'xml']; NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];
讀取plist中的內(nèi)容:
NSString *dataPath = [[NSBundle mainBundle] pathForResource:@'Data' ofType:@'plist']; self.data = [NSArray arrayWithContentsOfFile:dataPath];
刪除本地文件
NSString * thePath=[self getUserDocumentDirectoryPath];
NSMutableString * fullPath=[[[NSMutableString alloc]init]autorelease];
[fullPath appendString:thePath];
NSString * idString=[idArray objectAtIndex:indexPath.row];
NSString * coverName=[NSString stringWithFormat:@'/%@.jpg',idString];
[fullPath appendString:coverName];
NSFileManager *defaultManager;
defaultManager = [NSFileManager defaultManager];

  • (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error BOOL boolValue=[defaultManager removeItemAtPath: fullPath error: nil];
    if (boolValue) {
    NSLog(@'remove cover image ok');
    }
  • (NSString)getUserDocumentDirectoryPath {
    NSArray
    array = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
    if([array count])
    return [array objectAtIndex: 0];
    else return @'';
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末截歉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子烟零,更是在濱河造成了極大的恐慌瘪松,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锨阿,死亡現(xiàn)場(chǎng)離奇詭異宵睦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)墅诡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門壳嚎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人末早,你說(shuō)我怎么就攤上這事烟馅。” “怎么了荐吉?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵焙糟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我样屠,道長(zhǎng)穿撮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任痪欲,我火速辦了婚禮悦穿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘业踢。我一直安慰自己栗柒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瞬沦,像睡著了一般太伊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逛钻,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天僚焦,我揣著相機(jī)與錄音,去河邊找鬼曙痘。 笑死芳悲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的边坤。 我是一名探鬼主播名扛,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼茧痒!你這毒婦竟也來(lái)了肮韧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤文黎,失蹤者是張志新(化名)和其女友劉穎惹苗,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耸峭,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡桩蓉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了劳闹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片院究。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖本涕,靈堂內(nèi)的尸體忽然破棺而出业汰,到底是詐尸還是另有隱情,我是刑警寧澤菩颖,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布样漆,位于F島的核電站,受9級(jí)特大地震影響晦闰,放射性物質(zhì)發(fā)生泄漏放祟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一呻右、第九天 我趴在偏房一處隱蔽的房頂上張望跪妥。 院中可真熱鬧,春花似錦声滥、人聲如沸眉撵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)纽疟。三九已至罐韩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間污朽,已是汗流浹背伴逸。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膘壶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓洲愤,卻偏偏與公主長(zhǎng)得像颓芭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柬赐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容