zoukankan      html  css  js  c++  java
  • iOS10 NSBundle

    其中有用到NSBundle , 束   这个类
    先说一下这个类,这个类大概看了一下,NSBundle说到底还是一个路径而已
    [NSBundle mainBundle]用这个方法可以:
    返回当前应用程序可执行文件的一个目录
        NSString *path = [[NSBundle mainBundle] pathForResource:@"sortednames" ofType:@"plist"];

    然后再用这个方法就可以以文件名和文件类型获取文件路径,通过这个路径就可以访问这个文件了

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

    使用initWithContentsOfFile时,文件路径的写法
     使用initWithContentsOfFile方法可以通过读取一个文件的内容来初始化对象。 但文件的路径应该怎么确定呢? 可以使用NSBundle的对象来获取。
     例如当前程序所在目录下有个文件re.xml,我们要将该文件的内容做为NSData的数据源来初始化一个NSData对象,可以用下面的方法来实现:
     
    NSString *filePath
     = [[NSBundle mainBundle]
     pathForResouse:@"re" ofType:@"xml"];NSData *data
     = [[NSData alloc]
     initWithContentsOfFile:filePath];
     
    读取plist中的内容:
    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 **)errorBOOL 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 @"";
     
    }

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

    获取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"]];

  • 相关阅读:
    HDU 5818 Joint Stacks
    HDU 5816 Hearthstone
    HDU 5812 Distance
    HDU 5807 Keep In Touch
    HDU 5798 Stabilization
    HDU 5543 Pick The Sticks
    Light OJ 1393 Crazy Calendar (尼姆博弈)
    NEFU 2016省赛演练一 I题 (模拟题)
    NEFU 2016省赛演练一 F题 (高精度加法)
    NEFU 2016省赛演练一 B题(递推)
  • 原文地址:https://www.cnblogs.com/ytmaylover/p/5050279.html
Copyright © 2011-2022 走看看