zoukankan      html  css  js  c++  java
  • IOS 之 NSBundle 使用

    来源:http://blog.sina.com.cn/s/blog_b0c59541010151rd.html

    An NSBundle object represents a location in the file system that groups code and resources that can be used in a program. NSBundle objects locate program resources, dynamically load and unload executable code, and assist in localization. You build a bundle in Xcode using one of these project types: Application, Framework, plug-ins.
    大概翻译过来:
    NSBundle 对象指代相应应用程序下的所有可用的文件系统。就是说,可以用NSBundle操作应用程序下,所有可用的资源(包括,xib文件,数据文件,图片 等)。
     
     
    NSBundle 英语中的解释是:“捆,束”的意思,那我们可以理解为:
    NSBundle是将程序中所有资源捆在一起的对象
     

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

    bundle中的有些资源可以本地化.例如,对于foo.nib,我们可以有两个版本: 一个针对英语用户,一个针对法语用户. 在bundle中就会有两个子目录:English.lproj和French.lproj,我们把各自版本的foo.nib文件放到其中. 当程序需要加载foo.nib文件时,bundle会自动根据所设置的语言来加载. 我们会在16章再详细讨论本地化

    通过使用下面的方法得到程序的main bundle
    NSBundle *myBundle = [NSBundle mainBundle];

    一般我们通过这种方法来得到bundle.如果你需要其他目录的资源,可以指定路径来取得bundle
    NSBundle *goodBundle;
    goodBundle = [NSBundle bundleWithPath:@"~/.myApp/Good.bundle"];

    一旦我们有了NSBundle 对象,那么就可以访问其中的资源了
    // 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

    1.获取app的info.plist详细信息

    版本号:Bundle version

     NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    

    应用标识:Bundle identifier

    NSString *bundleId = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"];
    

    应用名称:Bundle display name

    NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"];
    

    Bundle name

    NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];
    

    2.应用程序语言本地化

    app本地化宏

    #define XLocalizedString(key, comment)        [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
    

    中英文两个Localizable.strings文件中键值对,例如

    "none" = "确定";
    
    "none" = "none";
    

    宏的用法:(返回NSString *)

    localizedString("none", "这是注释")
    

    3.获取包内文件路径和文件

    获取app包路径

    NSString *path = [[NSBundle mainBundle] bundlePath];
    

    app资源目录路径

    NSString *resPath = [[NSBundle mainBundle] resourcePath];
    
     

    获取资源目录下a.bundle

    NSString* path = [resPath stringByAppendingPathComponent:@"a.bundle"];
    NSBundle *bundle = [NSBundle bundleWithPath:path];
    
     

    获取app包的readme.txt文件路径

    NSString *path = [[NSBundle mainBundle] pathForResource:@"readme" ofType:@"txt"];
    




    //一旦我们有了bundle,就可以访问其中的资源文件了。
    NSString path = [otherBundle pathForImageResource:@"img"];
    NSImage img = [[NSImage alloc] initWithContentsOfFile:path];
    //bundle中可以包含一个库. 如果我们从库得到一个class, bundle会连接库,并查找该类:
    Class newClass = [otherBundle classNamed:@"Person"];
    id person = [[newClass alloc] init];
    //如果不知到class名,也可以通过查找主要类来取得
    Class aClass = [otherBundle principalClass];
    id classInstance = [[aClass alloc] init];
    //可以看到, NSBundle有很多的用途.在这章中, NSBundle负责(在后台)加载nib文件. 我们也可以不通过NSWindowController来加载nib文件, 直接使用NSBundle:
    BOOL flag = [NSBundle loadNibNamed:@"ViewController" 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"]];
  • 相关阅读:
    1142
    dbms_monitor开启/关闭会话跟踪
    mysql密码过期问题
    zabbix监控mysql
    12C -- ORA-65048 ORA-65048
    idea的快捷键
    IntelliJ IDEA的配置优化
    IDEA环境设置
    Java 中int、String的类型转换
    js数组去重
  • 原文地址:https://www.cnblogs.com/sunminmin/p/3800804.html
Copyright © 2011-2022 走看看