NSBundle

NSBundle理解(绑定包) bundle捆绑包/绑定包(bundle绑定包处于独立的硬件空间),Xcode工程师构建的可执行的项目工程的压缩产品软件包(ipa)本身也可视为某个绑定包(主绑定包mainBundle(主体研究对象方向))。主绑定包mainBundle包含可执行的逻辑规则代码指令和开发者注入的相关资源如图片资源/音频资源/视频资源等等。 结构层次概念体系NSBundle类用来定位可执行资源所处的位置,获取具体的可执行文件的位置而后加载进入内存中供CPU调用。NSBundle的使用仅限制于独立的绑定空间(对于独立的绑定空间可 阅读详情
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 **)error BOOL 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 @"" ;
   
}



NSBundle的使用,注意mainBundle和Custom Bundle的区别

1、[NSBundle mainBundle],文件夹其实是Group,如左侧的树形文件管理器

Build之后,文件直接就复制到了根目录下,于是读取的方法,应该是这样:

NSString  *earth = [[ NSBundle  mainBundle] pathForResource:@ "Brad Cox"  ofType:@ "png" ];

2、使用文件夹的时候,Build结果

依然使用同样的方法,不需要制定文件夹路径

//inDirectory参数可有可无
NSString *earth = [[NSBundle mainBundle] pathForResource:@"Matthijs" ofType:@"png" inDirectory:@"Images/MoreImages"]; 
NSString *earth = [[NSBundle mainBundle] pathForResource:@"Matthijs" ofType:@"png"];

 

编译之后,mainBundle的资源都是放到RootFolder下,所以,可以直接访问,不要指定内部路径

 

3、使用其他的Bundle

 

NSString  *resourceBundle = [[ NSBundle  mainBundle] pathForResource:@ "Resources"  ofType:@ "bundle" ];
     NSLog (@ "resourceBundle: %@" , resourceBundle);
     NSString  *earth = [[ NSBundlebundleWithPath :resourceBundle] pathForResource:@ "Matthijs" ofType:@ "jpg" inDirectory:@ "Images/MoreImages" ];
 
     NSLog (@ "path: %@" , earth);

使用Custom bundle,访问内部的子文件夹,需要指定inDirectory参数,这个mainBundle不同,这是为何?

注意:Since
bundles other than the main bundle can have folders embedded inside them, to access
files inside folders of a bundle other than the main bundle it is best to use the pathFor
Resource:ofType:inDirectory: method of NSBundle  to explicitly specify the folder in
which a specific file/resource exists.
FPGA音频处理入门:手把手教你用Verilog实现I2S接收模块(附完整代码) 本文详细介绍了如何使用Verilog在FPGA上实现I2S接收模块,涵盖I2S协议原理、Verilog架构设计、完整代码实现及优化技巧。通过实战案例,帮助开发者快速掌握数字音频处理技术,适用于嵌入式音频系统开发。 阅读详情

相关推荐

ubuntu虚拟机搭建OP-TEE

在网上找了一些搭建OP-TEE的过程,模仿着进行搭建,结果有好多报错,为了方便自己以后重新搭建,所以将整个过程记录下来。

weixin_44213847的博客 980

iOS NSBundle常用方法及解释

1、使用类方法创建一个NSBundler对象 + (NSBundle *)mainBundle; eg:[NSBundle mailBundle]; 2、使用路径获取一个NSBundle 对象,这个路径应该是一个目录的全路径 + (NSBundle *)bundleWithPath:(NSString *)path; eg: NSString *path = [mailBundle resourcePath]; NSBundle *language = [NSBundle bundleWithPa

假装你是大灰狼的专栏 2150

wafer上芯片产量估算

wafer上芯片产量估算,这是一个粗略估算wafer上die的产量excel文档,可以根据需要优化,修改,非常实用!

NSBundle介绍

bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in). 对应bundle,cocoa提供了类NSBundle. 我们的程序是一个bundle. 在Finder中,一个应用程序看上去和其他文件没有什么区别. 但是实际上它是一个包含了nib文件,编译代码,以及其他资源的目录. 我们把这个目录叫做程序的m...

Mac开发修炼之路 2439

NSBundle简要介绍

一、NSBundle   NSBundle是cocoa为bundle提供的一个类,bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像、声音、编译好的代码、nib文件。(用户也会把bundle称为plug-in)   bundle中的有些资源可以本地化。例如:对于zw.nib,我们可以有两个版本:一个针对英语用户,一个针对汉语用户。在bundle中就会有两个子目录:En...

KingOfOnePiece的博客 756

NSBundle详解及infoDictionary包内容

NSBundle 简介 bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in)。 对应bundle,cocoa提供了类NSBundle。  我们的程序是一个bundle. 在Finder中,一个应用程序看上去和其他文件没有什么区别。 但是实际上它是一个包含了nib文件,编译代码,以及其他资源的目录

st646889325的博客 2992

nsbundle

<br /><br />-- 思考: NSBundle ---<br />bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in). 对应bundle,cocoa提供了类NSBundle.<br />我们的程序是一个bundle. 在Finder中,一个应用程序看上去和其他文件没有什么区别. 但是实际上它是一个包含了nib文件,编译代码,以及其他资源的目录. 我们把这个目录叫做程序的main bundle<br

iphoneing的专栏 1万+

NSBundle、[NSBundle mainBundle] 详解

bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in). 对应bundle,cocoa提供了类NSBundle. 我们的程序是一个bundle. 在Finder中,一个应用程序看上去和其他文件没有什么区别. 但是实际上它是一个包含了nib文件,编译代码,以及其他资源的目录. 我们把这个目录叫

ShiDuQi的专栏 1229

IOS之NSBundle的使用详解

-,介绍NSBundle        有过Android开发工作经验的同学都知道,Android有AssertMannager来加载项目本地资源,并把他们转化成文件流,同样IOS也有类似的系统类,那就是NSBundle。 bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in). 对应

watertekhqx的博客 928

NSBundle简介

bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in). 对应bundle,cocoa提供了类NSBundle. 我们的程序是一个bundle. 在Finder中,一个应用程序看上去和其他文件没有什么区别. 但是实际上它是一个包含了nib文件,编译代码,以及其他资源的目录. 我们把这个目录叫做程序的

逢个场,作个戏 655

NSbundle的理解

bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in). 对应bundle,cocoa提供了类NSBundle. 我们的程序是一个bundle. 在Finder中,一个应用程序看上去和其他文件没有什么区别. 但是实际上它是一个包含了nib文件,编译代码,以及其他资源的目录. 我们把这个目录叫做程

Reborn_Young的专栏 701

IOS_基础类库之NSBundle

1、使用类方法创建一个NSBundler对象 + (NSBundle *)mainBundle; eg:[NSBundle mailBundle]; 2、使用路径获取一个NSBundle 对象,这个路径应该是一个目录的全路径 + (NSBundle *)bundleWithPath:(NSString *)path; eg:   NSString *path = [mailBundle

shx_yi的专栏 7772

iOS10 NSBundle

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

diab16244的博客 168

NSBundle的最佳解释

bundle是一个包含了程序会使用到的资源的目录,我们的程序就是一个main bundle。通过NSBundle *bundles= [NSBundle mainBundle];,可以获得当前程序的目录,也就可以通过bundles访问程序下的所有资源。

北方的天空 714

NSBundle pathForResource取不到值如何解决?

在iOS项目开发过程中,总会遇到或多或少的问题,比如说,在使用NSBundle pathForResource取不到值,着实让人纠结,下面将奉上超级解决方案。 [code="objective-c"] NSString *path = [[NSBundle mainBundle] pathForResource:@"sortednames" ofType:@"plist"]; ...

{丸の子} 168

NSBundle详解及iOS包内容

NSBundle 简介 bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in)。 对应bundle,cocoa提供了类NSBundle。  我们的程序是一个bundle. 在Finder中,一个应用程序看上去和其他文件没有什么区别。 但是实际上它是一个包含了nib文件,编译代码,以及其他资源的目录....

DCSnail-蜗牛 1036

NSBundle常用方法及解释

1、使用类方法创建一个NSBundler对象+ (NSBundle *)mainBundle;eg:[NSBundle mailBundle];2、使用路径获取一个NSBundle 对象,这个路径应该是一个目录的全路径+ (NSBundle *)bundleWithPath:(NSString *)path;eg: NSString *path = [mailBundle resour...

weixin_30500105的博客 298

浅谈NSBundle

图片、xib等资源文件无法直接封入静态库,那么要想在静态库中使用他们,就

雅香小筑 2504

iOS基础:NSBundle

一、bundle bundle是一个目录,其中包含了程序会使用到的资源.这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in).对应bundle,cocoa提供了类NSBundle. 二、使用 工程中的目录结构 1、通过bundle获取资源路径或Url //通过bundle获取资源路径 -(void)getPath{

gongwutianya的博客 535

iOS开发:关于NSBundle

我们从bundle中获取一张图片,可以有这样的获取思路: 1)获取主bundle 2)获取自定义bundle 3)获取自定义bundle中的资源 通常可以这样写: //主bundle,也就是可执行的工程的bundle NSBundle *mainBundle = [NSBundle mainBundle]; //NSBundle *mainBundle = [NSBundle bundleForClass:[self class]]; //放在主工程中的自定义bundle NSString *my

酸柠檬的博客 1461
上一篇: NSDate 使用
下一篇: 字符属性NSAttributedString
Vic__li
博客等级 码龄11年 27粉丝 123原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值