博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS 之 NSBundle 使用
阅读量:6591 次
发布时间:2019-06-24

本文共 1521 字,大约阅读时间需要 5 分钟。

hot3.png

IOS开发的时候,经常看到这样的代码,

[[NSBundle mainBundle] pathForResource:@"someFileName" ofType:@"yourFileExtension"]; 

[YourViewController initWithNibName:"YourViewController" bundle:nil];

一开始还不是很理解,通过google,慢慢的知道bundle在ios中的作用。

Bundle是什么呢?bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in). 对应bundle,cocoa提供了类NSBundle.bundle中的有些资源可以本地化.例如,对于foo.nib,我们可以有两个版本: 一个针对英语用户,一个针对法语用户. 在bundle中就会有两个子目录:English.lproj和French.lproj,我们把各自版本的foo.nib文件放到其中. 当程序需要加载foo.nib文件时,bundle会自动根据所设置的语言来加载.

//在程序中获得main bundle

NSBundle bundle = [NSBundle mainBundle];  //很简单

//一般我们通过这种方法来得到bundle.如果你需要其他目录的资源,可以指定路径来取得bundle

NSBundle otherBundle = [NSBundle bundleWithPath:@"~/.myApp/Good.bundle"];

//一旦我们有了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];

转载于:https://my.oschina.net/CarlHuang/blog/135454

你可能感兴趣的文章
MapGuide开发中使用Fusion Viewer及通过程序开关图层
查看>>
最简单的基于FFmpeg的AVDevice例子(读取摄像头)【转】
查看>>
解决eclipse不识别Android手机的问题
查看>>
标准答案-有多少人能分得清值类型和引用类型?
查看>>
Java8-Stream-No.12
查看>>
Java编译那些事儿【转】
查看>>
各种排序算法的总结
查看>>
[.net 面向对象程序设计进阶] (25) 团队开发利器(四)分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境【转】...
查看>>
SpringBoot相关
查看>>
[LeetCode] Sudoku Solver 求解数独
查看>>
html5/haXe开发偶感
查看>>
js深入研究之神奇的匿名函数类生成方式
查看>>
The life cycle of a typical project 一个典型的项目生命周期
查看>>
推荐F#最近的一些资源
查看>>
Linux文件操作
查看>>
ylbtech-Recode(记录)-数据库设计
查看>>
运动目标跟踪与检测的源代码(CAMSHIFT 算法)
查看>>
PHP工厂模式的简单实现
查看>>
线程同步中异常情况的处理
查看>>
Orchard模块开发全接触3:分类的实现及内容呈现(Display)
查看>>