`

Bundle使用&NSBundle

    博客分类:
  • ios
阅读更多

 Bundle就是一个内部结构按照标准规则组织的特殊目录,理解为directory即可;

IOS的应用都是通过bundle进行封装的,对应的bundle类型是Application类型,平时我们通过XCode编译出来的Target(即我们开发的应用),其实就是一个Application类型bundle,即一个文件夹!但是Finder会把这个bundle当做一个文件显示给我们,因为这个bundle自身也是一个package,而Mac系统会把所有的package当做一个文件来对待,显示给用户,从而防止用户误操作导致程序文件损坏或丢失。

bundle对iOS开发者来讲,最大的方便就是可以非常简单地让自己的应用国际化,在不同的语言不同的地区,加载不同的资源文件,显示不同的语言文字,而实现这些只需要我们严格按照bundle的要求进行资源文件的存放即可,而不需要写大量代码判断地区语言。遵循的方法也很简单,只需要我们创建对应的"本地化文件夹"即可,例如我们要同时让图片"pic.png"在中文和英文下显示不同的内容,只需要创建两个本地化文件夹zh.lproj和en.lproj,分别放入同名但内容不同的"pic.png"即可。

bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in). 对应bundle,cocoa提供了类NSBundle.

我们的程序是一个bundle. 在Finder中,一个应用程序看上去和其他文件没有什么区别. 但是实际上它是一个包含了nib文件,编译代码,以及其他资源的目录. 我们把这个目录叫做程序的main bundle

 

代码:

NSBundle *myBundle = [NSBundle mainBundle];
一般我们通过这种方法来得到bundle.如果你需要其他目录的资源,可以指定路径来取得bundle
// Extension is optional
NSString *path = [goodBundle pathForImageResource:@"Mom"];
NSImage *momPhoto = [[NSImage alloc] initWithContentsOfFile:path];
bundle中可以包含一个库. 如果我们从库得到一个class, bundle会连接库,并查找该类:
Class newClass = [goodBundle classNamed:@"Rover"];
id newInstance = [[newClass alloc] init];
如果不知到class名,也可以通过查找主要类来取得
Class aClass = [goodBundle principalClass];
id anInstance = [[aClass alloc] init];
可以看到, NSBundle有很多的用途.在这章中, NSBundle负责(在后台)加载nib文件. 我们也可以不通过NSWindowController来加载nib文件, 直接使用NSBundle:
BOOL successful = [NSBundle loadNibNamed:@"About" owner:someObject];
注意噢, 我们指定了一个对象someObject作为nib的File”s Owner

获取XML文件
NSString *filePath = [[NSBundle mainBundle] pathForResouse:@"re" ofType:@"xml"];
NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];

获取属性列表
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"ViewControllers" ofType:@"plist"]];

//bundle实际上是一个目录,其中包含了程序会使用的资源,包括:图像,声音,编译好的代码,nib文件等,cocoa中对应的类是NSBundle Carbon中对应的是CFBundleRef
    NSBundle *bundle = [NSBundle mainBundle];
    NSLog(@"mainBundlePath:%@",[bundle bundlePath]);
    
    //使用bundle类可以访问该项目中的所有资源,mainBundle对应的是该项目的根目录,想要获取其中的资源,需要使用对应的方法
    
    //如果该路径为NULL,说明该路径下找不到指定的资源 一个路径对应着一个资源文件,然后根据path或者url把文件读入到内存里
    NSString *imagePah = [bundle pathForResource:@"button_bg" ofType:@"png"];
    NSLog(@"imagePath:%@",imagePah); 
    UIImage *image = [[UIImage alloc] initWithContentsOfFile:imagePah];
    NSLog(@"imageDescription:%@",[image description]);
    NSLog(@"image size:%d",[image size]);
    
 

 

   NSBundle *mainBundle = [NSBundle mainBundle];
   NSString *path = [mainBundle pathForResource:@"副本221" ofType:@"png"inDirectory:@"未命名文件夹"];
    
    BOOL flag = NO;
    NSLog(@"%@",path);
    flag = [[NSFileManager defaultManager] fileExistsAtPath:path];
    
    NSLog(@"%@",mainBundle.bundlePath);
//    NSLog(@"%@",mainBundle.bundleURL);
//    NSLog(@"%@",mainBundle.infoDictionary);
//    NSLog(@"%@",[mainBundle.infoDictionary objectForKey:@"CFBundleVersion"]);
    
    NSLog(@"%@", [mainBundle pathsForResourcesOfType:@"png" inDirectory:@"未命名文件夹"]);
 

 

加载视图:
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableFooterView" owner:self options:nil];

    TableFooterView *footerView = (TableFooterView *)[nib objectAtIndex:0];
 

 

分享到:
评论

相关推荐

    Apple NSBundle 使用说明文档

    NSBundle *bundle = [NSBundle bundleWithPath:@"/path/to/your/bundle"]; ``` 2. **NSBundle的生命周期**: - `NSBundle`的生命周期与应用的生命周期紧密相关。主NSBundle在应用启动时被加载,并在整个应用的...

    IOS打包Bundle与加载Demo

    NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"ResourcesBundle" ofType:@"bundle"]]; UIImage *image = [UIImage imageWithContentsOfFile:[bundle pathForResource:@...

    NSBundle读取图片 plist文件和txt文件

    在这个主题中,我们将深入探讨如何使用NSBundle来读取图片、plist文件以及txt文件。 首先,我们来看一下NSBundle的基本用法。NSBundle对象通常代表一个应用程序或扩展的资源包。你可以通过`[NSBundle mainBundle]`...

    CustomXibOnXib

    TARGET_INTERFACE_BUILDER NSBundle *bundle = [ NSBundle mainBundle ];# else NSBundle *bundle = [ NSBundle bundleForClass: [ self class ]];# endif// change nib named string if your xib name not the same...

    IOS系统资源类

    NSString *bundleID = [[NSBundle mainBundle] bundleIdentifier]; ``` 这段代码会返回当前运行的应用的BUNDLEID。 在Swift中,我们可以使用相同的`NSBundle`类,但需要转换为Swift语法: ```swift let bundleID =...

    IOS UI学习教程之区分NSBundle和NSURL(读取文件、写入文件)

    在iOS开发中,`NSBundle` 和 `NSURL` 都是用来处理资源文件的类,但它们在功能和使用场景上有所不同。这篇教程将帮助你理解这两个类的区别,并展示如何使用它们来读取和写入文件。 首先,`NSBundle`(Bundle)是iOS...

    IOS获取当前版本号 Bundle ID等信息的方法详解

    1:获取bundle Id信息:[[NSBundle mainBundle]bundleIdentifier]; 2:获取版本号:[[[NSBundle mainBundle]infoDictionary] objectForKey:@”CFBundleShortVersionString”]; 3:获取build号:[[[NSBundle ...

    iOS中.a和.framework静态库的创建与.bundle资源包的使用详解

    3. 使用NSBundle或Swift的Bundle API读取.bundle内的资源。 使用静态库和.bundle资源包的好处包括: - 代码模块化:将常用功能封装为库,方便复用和维护。 - 保护源码:对外提供API而不暴露具体实现。 - 分享代码库...

    IOS Bundle详细介绍及使用方法

    1. **加载Bundle中的资源**: 通过NSBundle类提供的方法,可以方便地获取Bundle中的文件路径,例如`[[NSBundle mainBundle] pathForResource:@"filename" ofType:@"extension"]`。 2. **处理本地化**: 使用`...

    iOS 加载Bundle文件的实例代码

    在给定的实例代码中,展示了如何使用NSBundle加载一个名为"fileName"的JavaScript文件,文件类型为"js": ```objc - (NSString *)loadJsFile:(NSString *)fileName Type:(NSString *)type { // 使用NSBundle的...

    iOS开发SDK(framework、bundle、脚本打包)

    在代码中,可以通过NSBundle对象来访问.bundle内的资源,这样可以使代码更加模块化,便于资源的更新和维护。 脚本打包SDK是一项重要技能,尤其对于大型项目和第三方服务集成而言。脚本打包可以自动化构建过程,包括...

    用来修改OC项目马甲包的.xcassets以及bundle中的图片文件.zip

    在代码中,我们通常使用`NSBundle`类来访问.bundle内的资源。 对于马甲包的修改,可能涉及到替换.bundle中的图片,步骤如下: 1. 将新的图片文件放入相应马甲包的.bundle文件夹。 2. 确保新图片的名称和原有图片...

    Swift本地化的命令行工具xcmultilingual.zip

     return NSLocalizedString(rawValue, tableName: "Animal", bundle: NSBundle.mainBundle(), value: "\(rawValue)", comment: "")  }  static func keys() -> [String] {  return ["CAT", "DOG...

    静态库中使用xib

    [NSBundle loadNibNamed:@"MyView" owner:self options:nil]; } ``` 或 ```swift @objc class MyClass: UIView { override init(frame: CGRect) { super.init(frame: frame) commonInit() } required ...

    iOS Open PDF Demo

    NSBundle *bundle = [NSBundle mainBundle]; NSString *path = [bundle pathForResource:@"your_pdf_file_name" ofType:@"pdf"]; NSURL *url = [NSURL fileURLWithPath:path]; ``` 这里,"your_pdf_file_name"应替换...

    ios UIImage category 图片加载

    NSBundle *bundle = [NSBundle mainBundle]; NSString *path = [bundle pathForResource:fileName ofType:@"png"]; // 根据需要支持不同的图片格式 NSData *data = [NSData dataWithContentsOfFile:path options:...

    iOS最佳实践:iOS软件设计最佳实践

    iOS软件设计最佳实践 本文的目的是帮助您为iOS应用程序...- ( id )initWithNibName:( NSString *)nibNameOrNil bundle:( NSBundle *)nibBundleOrNil { if ((self = [ super initWithNibName: nibNameOrNil bundle: n

Global site tag (gtag.js) - Google Analytics