在進(jìn)行資源封裝的時(shí)候用到了自定義的.bundle文件户魏,之前在很多的SDK中也可以看到它的身影蟆沫,就稍微了解了一下澳迫,不難,就是在引用里面文件的時(shí)候浪費(fèi)點(diǎn)時(shí)間澈段,浪費(fèi)的原因下面也有說(shuō)悠菜,這里就記錄一下如何自定義創(chuàng)建.bundle以及如何引用里面的資源文件.
在使用.bundle文件的時(shí)候需要注意:這個(gè)文件在運(yùn)行的時(shí)候不會(huì)被編譯到,So败富,此文件中存儲(chǔ)的內(nèi)容應(yīng)該是資源文件悔醋,不能放編譯的文件(比如能編譯運(yùn)行的代碼)。
創(chuàng)建.Bundle文件
1兽叮、右鍵(雙指點(diǎn)擊) -> New File ->iOS-> Resource -> Settings Bundle
2篙顺、在這里樓主起名叫做YPhotoBundle,這里也不需要寫(xiě)后綴名(.bundle)充择,然后點(diǎn)擊Create即可
3、這個(gè)時(shí)候就會(huì)看到在創(chuàng)建路徑下會(huì)有一個(gè)YPhotoBundle.bundle文件匪蟀,右鍵(雙指點(diǎn)擊)打開(kāi)包文件
4椎麦、里面原來(lái)的東西不需要的可以都刪掉,因?yàn)闃侵鞣诺氖菆D片資源材彪,所以直接把Image文件夾放到了里面观挎,然后添加到項(xiàng)目中,就可以看到自定的.bundle文件以及里面的資源文件
使用自定義.Bundle里面的資源文件
錯(cuò)誤演示
先來(lái)一個(gè)錯(cuò)誤演示段化,也是浪費(fèi)了點(diǎn)時(shí)間的原因嘁捷,由于第一次這么干,習(xí)慣性的Command + 單擊,看到里面有這么一個(gè)方法
+ (nullable NSBundle *)bundleWithIdentifier:(NSString *)identifier;
1
1
自認(rèn)為是.bundle的名字默認(rèn)當(dāng)做Identifier显熏,于是就想用這個(gè)方法獲取自定義的NSBundle文件雄嚣,于是乎,獲取圖片用的是一下代碼:
//獲取路徑
NSString* path = [[NSBundlebundleWithIdentifier:@"YPhotoBundle"] pathForResource:@"Image"ofType:nil];
//拼接路徑
path = [path stringByAppendingPathComponent:@"未選中.png"];
//獲取圖片對(duì)象
return[UIImageimageWithContentsOfFile:path];
結(jié)果發(fā)現(xiàn),返回的bundle缓升,path鼓鲁,image全部為nil,于是又仔細(xì)讀一下它的官方文檔:
//返回之前創(chuàng)建過(guò)并且擁有bundle identifier的NSBundle實(shí)例
Returns the previously created NSBundle instance that has the specified bundle identifier.
/**
*如果找不到港谊,則返回nil
*好吧我承認(rèn)結(jié)果就是找不到0.0骇吭,我也不知道如何在創(chuàng)建.bundle的時(shí)候給予他bundle identifier
*因?yàn)樵贛ethods for creating的方法里沒(méi)有找到,如果有知道的大神歧寺,麻煩告知一下 Mark
**/
The previously created NSBundle instance that has the bundle identifier identifier. Returns nilifthe requested bundle is not found.
正確用法
前面扯了段錯(cuò)誤演示燥狰,(傲嬌了一下 - -),正確的用法如下:
1斜筐、獲得自定義.bundle文件的路徑
//自定義的.bundle文件也存在與應(yīng)用的主目錄下龙致,所以還是需要從主目錄來(lái)拼接路徑
-(NSString*)bundlePath
{
//獲取路徑
NSString* path = [[NSBundlemainBundle] pathForResource:@"YPhotoBundle"ofType:@"bundle"];
return[path stringByAppendingPathComponent:@"Image"];
}
2、在引用圖片的時(shí)候在使用方法就可以獲取到Y(jié)PhotoBundle.bundle里面Image下的資源文件奴艾。
//獲得正常未選中的圖片
-(UIImage*)normalImage
{
//最后加不加.png都是可以的净当,因?yàn)闆](méi)有重名的問(wèn)題
return[UIImageimageWithContentsOfFile:[self.bundlePathstringByAppendingPathComponent:@"未選中.png"]];
}