1. 程式人生 > >iOS之NSBundle的使用/打包成bundle檔案

iOS之NSBundle的使用/打包成bundle檔案

參考:http://blog.csdn.net/sjl51060/article/details/43938911

http://www.jianshu.com/p/a8c9e52c80de

1.Bundle 檔案,簡單理解,就是資原始檔包。我們將許多圖片、XIB、文字檔案組織在一      起,打包成一個 Bundle 檔案。方便在其他專案中引用包內的資源。

2.Bundle 檔案是靜態的,也就是說,我們包含到包中的資原始檔作為一個資源包是不參       加專案編譯的。bundle 包中不能包含可執行的檔案。它僅僅是作為資         源,被解析成為特定的二進位制資料。

3.前往Build Settings設定引數

  • "Base SDK" 設定為 "IOS 8.3" (Xcode 6.3.2為例)
  • "Build Active Architecture Only" 設定為 "YES"
  • "Debug Information Format" 設定為 "DWARF with dSYM File"
  • "OS X Deployment Target" 設定為 "Compiler Default"
  • "Skip Install" 設定為 "NO"
  • "Strip Debug Symbols During Copy" 中"Release"模式設定為 "YES"
  • "IOS Deployment Target" 設定為 "IOS 7.0"
  • "COMBINE_HIDPI_IMAGES" 設定為 "NO"

3.bundle的製作-------




將資原始檔或資料夾拖動到工程中的 SourcesBundle 資料夾下面。

編譯生成 Bundle 檔案。---分別選擇 Generic iOS Device 和任意一個模擬器各編譯一次,編譯完後,我們會看到工程中 Products 資料夾下的 SourcesBundle.bundle 由紅色變成了黑色。

  •  show in finder,看看生成的檔案。我們看到它為真機和模擬器都生成了 .bundle 資原始檔。

=========bundle資源包的使用一:

吧生成的bundle檔案拖到要使用餓工程中;

// 設定檔案路徑

NSString

*bundlePath = [[NSBundlemainBundle]pathForResource:@"SourcesBundle"ofType:@"bundle"];

NSBundle *resourceBundle = [NSBundlebundleWithPath:bundlePath];

// 載入 nib檔案

UINib *nib = [UINibnibWithNibName:@"Demo"bundle:resourceBundle];

NSArray *viewObjs = [nibinstantiateWithOwner:niloptions:nil];

// 獲取 xib檔案

UIView *view = viewObjs.lastObject;

view.frame = CGRectMake(20,50,self.view.bounds.size.width -40,self.view.bounds.size.width -40);

[self.view addSubview:view];

VC獲得bundle中的資源

NSString * bundlePath = [[ NSBundle mainBundlepathForResource: @ "MyBundle"ofType :@ "bundle"];

NSBundle *resourceBundle = [NSBundle bundleWithPath:bundlePath];

UIViewController *vc = [[UIViewController allocinitWithNibName:@"vc_name"bundle:resourceBundle];

圖片獲得bundle中的資源

UIImageView *imgView=[[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 50,50)];

UIImage *image = [UIImage imageNamed:@"MyBundle.bundle/img_collect_success"];

[imgView setImage:image];


==========bundle資源包的使用二:載入 Bundle中的圖片資原始檔

指定絕對路徑的形式:

UIImage *image = [UIImage imageNamed:@"SourcesBundle.bundle/demo.jpg"];

拼接路徑的形式:

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"SourcesBundle" ofType:@"bundle"];

NSString *imgPath= [bundlePath stringByAppendingPathComponent:@"sb"];

UIImage *image = [UIImageimageWithContentsOfFile:imgPath];

巨集定義的形式:

#define MYBUNDLE_NAME   @"SourcesBundle.bundle"

#define MYBUNDLE_PATH   [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:MYBUNDLE_NAME]

#define MYBUNDLE        [NSBundle bundleWithPath:MYBUNDLE_PATH]

NSString *imgPath= [MYBUNDLE_PATH stringByAppendingPathComponent:@"demo4"];

UIImage *image = [UIImage imageWithContentsOfFile:imgPath];

===========bundle的使用三 在控制器中加入一下程式碼:

-(instancetype)init{

NSString *bundlePath = [[NSBundlemainBundle] pathForResource:@"WofuSDKBundle"ofType:@"bundle"];

NSBundle *resourceBundle = [NSBundlebundleWithPath:bundlePath];

self=[superinitWithNibName:@"Wofubindbankcarvc"bundle:resourceBundle];

returnself;

}


==========bundle的使用四=====載入bundle中的xib生成的cell

載入nib的時候使用以下程式碼,最主要的是表明是從那個bundle中獲取nib;

NSString *bundlePath = [[NSBundlemainBundle] pathForResource:@"WofuSDKBundle"ofType:@"bundle"];

NSBundle *resourceBundle = [NSBundlebundleWithPath:bundlePath];

UINib *nib=[UINibnibWithNibName:@"Wofucreditcell"bundle:resourceBundle];

    [tab registerNib:nib forCellReuseIdentifier:identifier];