[NSBundle mainBundle] 详解

bacnet 官方协议栈 bacnet-stack-0.8.2关于router例程BACnet MS/TP BACnet IP调试说明 bacnet 官方协议栈 bacnet-stack-0.8.2关于router例程mstp,bacnet ip调试说明 阅读详情

转:NSBundle介绍 http://blog.sina.com.cn/s/blog_8c87ba3b0100t89v.html 



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 @"";
 
}

NSLog(@"ios 应用发布后 .app 应用文件 路径::%@",[NSBundle mainBundle] );

    NSLog(@"ios 应用发布后 .app 应用包(文件) 的详细信息 ::%@",[[NSBundle mainBundle] infoDictionary]);

 

 

[[NSBundle mainBundle] infoDictionary] 返回的是一个数据字典内容如下:

(XX1 为当前应用的名字 也就是app 包的名字 )--( 部分地方 XX 大写 我隐藏了部分信息...... )

 ios 应用发布后 .app 应用文件内 ::{

    CFBundleDevelopmentRegion = en;

    CFBundleDisplayName = "当前app 文件名XX1";

    CFBundleExecutable = "当前app 文件名XX1";

    CFBundleExecutablePath = "/Users/yq-010/Library/Application Support/iPhone Simulator/5.1/Applications/49419CEE-6608-48FE-81FE-BF40FEEFB8F7/XX1.app/xx1";

    CFBundleIconFiles =     (

        "icon.png",

        "icon@2x.png"

    );

    CFBundleIcons =     {

        CFBundlePrimaryIcon =         {

            CFBundleIconFiles =             (

                "icon.png",

                "icon@2x.png"

            );

            UIPrerenderedIcon = 1;

        };

    };

    CFBundleIdentifier = "com.xxxx.xxxxx";

    CFBundleInfoDictionaryVersion = "6.0";

    CFBundleInfoPlistURL = "Info.plist -- file://localhost/Users/yq-010/Library/Application%20Support/iPhone%20Simulator/5.1/Applications/49419CEE-6608-48FE-81FE-BF40FEEFB8F7/XX%20XX%20XX.app/";

    CFBundleName = "XX1";

    CFBundlePackageType = APPL;

    CFBundleShortVersionString = "1.3";

    CFBundleSignature = "????";

    CFBundleSupportedPlatforms =     (

        iPhoneSimulator

    );

    CFBundleVersion = "1.3";

    DTPlatformName = iphonesimulator;

    DTSDKName = "iphonesimulator5.1";

    LSRequiresIPhoneOS = 1;

    NSBundleInitialPath = "/Users/yq-010/Library/Application Support/iPhone Simulator/5.1/Applications/49419CEE-6608-48FE-81FE-BF40FEEFB8F7/XX1.app";

    NSBundleResolvedPath = "/Users/yq-010/Library/Application Support/iPhone Simulator/5.1/Applications/49419CEE-6608-48FE-81FE-BF40FEEFB8F7/XX1.app";

    UIDeviceFamily =     (

        1

    );

    UIPrerenderedIcon = 1;

    UIRequiredDeviceCapabilities =     (

        armv7

    );

    UISupportedInterfaceOrientations =     (

        UIInterfaceOrientationPortrait

    );

}

 

应用1:我们可以通过包的信息的数据字典 得到 应用的版本 CFBundleVersion = "1.3";

当前应用的版本 :

[[[NSBundlemainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]]


基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的商品识别系统(深度学习+UI界面+训练数据集+Python代码) 随着新零售和智能仓储的快速发展,商品识别技术成为计算机视觉领域的重要研究方向。本文详细介绍了基于YOLO系列算法的商品识别系统的完整实现方案,涵盖算法原理、数据集构建、模型训练、系统集成和可视化界面开发。通过对比YOLOv5到YOLOv8各版本性能差异,我们构建了一个高效、准确且用户友好的商品识别系统,并提供完整的代码实现。 阅读详情

相关推荐

树莓派部署Home Assistant:打造本地化智能家居大脑

家庭自动化旨在通过技术提升居住便利性与舒适度,其核心在于中枢控制系统对各类设备的统一调度。传统云端方案虽部署简便,但存在隐私泄露、网络依赖与生态壁垒等固有缺陷。本地化部署通过将控制逻辑与数据存储于家庭内部网络,从根本上解决了这些问题,实现了数据自主、离线可用与跨品牌联动。Home Assistant作为领先的开源家庭自动化平台,结合树莓派这一低功耗、高性价比的硬件载体,为构建私有、可靠的智能家居中枢提供了成熟方案。本文以树莓派4B为例,详细阐述了从系统安装、设备集成到自动化场景创建的完整实践流程,并深入探讨

weixin_33501543的博客 372

iOS NSBundle常用方法及解释

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

假装你是大灰狼的专栏 2159

晶晨S905L3S/S905L3SB芯片刷机实战:BL加载工具与线刷固件全解析

本文针对晶晨S905L3S/S905L3SB芯片电视盒子刷机时常见的2%失败问题,提供了两种核心解决方案。一是使用已集成特殊通信协议的专用版USB Burning Tool(如V2.2.5/V2.2.7),二是采用旧版工具配合独立的BootLoader加载工具。文章详细解析了两种方案的原理、操作步骤、固件选择及常见问题排查,旨在帮助用户成功完成刷机,让老旧设备焕发新生。

weixin_29238147的博客 1105

[NSBundle mainBundle]加载文件用法

1.NSBundle 1> 一个NSBundle代表一个文件夹,利用NSBundle能访问对应的文件夹 2> 利用mainBundle就可以访问软件资源包中的任何资源 3> 模拟器应用程序的安装路径 /Users/aplle/资源库/Application Support/iPhone Simulator/7.1/Applications 怎样将文件加载到程序代码? 例如将im

u012394514的专栏 946

PyTorch转ONNX遇到算子不支持?3种实战解决方案+TensorRT适配技巧

本文针对PyTorch模型导出ONNX时常见的算子不支持问题,提供了从诊断到解决的完整实战指南。首先讲解如何精准定位错误根源,随后详细介绍了三种核心解决方案:注册缺失的符号映射、实现自定义算子,以及为TensorRT开发插件的终极落地方案。文章还分享了构建稳健部署流水线的工程化实践,帮助开发者系统性地解决模型部署中的算子兼容性挑战。

fern8的博客 842

嵌入式开发实战:LWIP中PPP协议配置全流程(含CHAP认证避坑指南)

本文是一份嵌入式开发实战指南,详细解析了如何在STM32平台上配置LWIP协议栈中的PPP协议,实现从串口到IP网络的完整连接。内容涵盖工程搭建、源码整合、关键配置、串口驱动绑定、状态管理以及CHAP认证等核心流程,并重点提供了CHAP认证失败的排查与避坑指南,帮助开发者高效打通嵌入式设备的网络连接。

plant的博客 460

NSBundle的理解和mainBundle的基本介绍

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

weixin_30553065的博客 378

Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包

联网情况下在命令终端CMD中输入“pip install numpy”即可自动安装,pandas和matplotlib同理一样方法进行自动安装。 工作的电脑不能上外网,所以不能通过直接输入pip命令来安装。 环境:电脑上已经安装了Python(没有安装的请参考其他教程)。 Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包的步骤如下: ...

dayou7738的博客 4939

NSBundle、[NSBundle mainBundle] 详解

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

ShiDuQi的专栏 1231

网络系统管理专栏-配套练习+知识点详解

网络系统管理专栏-配套练习+知识点详解

bfq05234214的博客 681

【异常】Milvus 向量数据库字段缺失错误分析与解决 MilvusVectorStoreServiceV2 - Failed to insert batch [0-1]: The field:

本文分析了Milvus向量数据库插入操作中出现的字段缺失错误。错误显示age_mode字段未提供,导致批量插入失败。根本原因是Milvus Schema要求所有定义字段必须存在,但代码中对部分字段采用条件添加方式。解决方案是将条件添加改为始终添加,为可能为null的字段提供空字符串默认值。文章总结了Schema约束、防御性编程等经验,并建议通过Schema变更检查、单元测试覆盖和数据校验层等预防措施避免类似问题。该问题影响product、mac、source等多个字段,修改后确保了数据插入的可靠性。

奶爸的编程之路,也就一周冷个三天 403

NSBundle 的理解和 mainBundle 类方法详解,nsbundlemainbundle

常看到类似的 NSString *file = [[NSBundle mainBundle] pathForResource:name ofType:nil]; 这样的代码,来产生 file 的完全路径。 那么它是什么东西呢:先看 NSBundle 类,直接继承NSObject类。 这个类的对象,代表了 app 中代码和资源的文件在文件系统里所在的位置,通俗的说,就是定位了程

XCBYZX的博客 691

03. 线性规划与混合整数规划 (LP/MIP)

本文介绍了OR-Tools中的线性规划(LP)和混合整数规划(MIP)求解器。主要内容包括:1) LP/MIP的基本概念和数学形式,对比了LP、MIP、ILP和BIP的区别;2) OR-Tools支持的求解器类型,如GLOP、SCIP等,以及它们各自的特点和适用场景;3) 详细展示了如何使用GLOP求解器进行线性规划求解,包括变量定义、约束添加和目标函数设置;4) 介绍了SCIP求解器的配置和使用方法;5) 讨论了变量类型、约束类型、多目标优化等进阶功能。文章通过Java代码示例演示了如何实现一个完整的优化

智慧是做事用的 156

NSBundle 的理解和 mainBundle 类方法的详解

常看到类似的 1 NSString *file = [[NSBundle mainBundle] pathForResource:name ofType:nil]; 这样的代码,来产生 file 的完全路径。 那么它是什么东西呢:先看 NSBundle 类,直接继承NSObject类。 这个类的对象,代表了 app 中代码和资源的文件在文件系统里所在的位置,通俗的说,就是定位...

weixin_34054931的博客 287

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IOS NSBundle 的理解和 mainBundle 类方法详解

常看到类似的 NSString *file = [[NSBundle mainBundle] pathForResource:name ofType:nil]; 这样的代码,用来获取 file 的完全路径。 那么它是什么东西呢:先看 NSBundle 类,直接继承NSObject类。 这个类的对象,代表了 app 中代码和资源的文件在文件系统里所在的位置,通俗的说,就是定位了程序使用的资...

weixin_30843605的博客 283

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

iOS8正确访问mainBundle和自定义Bundle中子文件夹资源文件NSBundle

iOS8出来很久了,由于生意和工作的原因,一直没有仔细研究,最近空了下来,写一下最近碰到的一个小坑,希望对大家在NSBundle这一个东西上有所帮助,看清楚mainBundle中访问资源和自定义Bundle中访问资源的差别所在。 PS:本文涉及到控件的摆放,不清楚Auto Layout的同学,可以自已看一下苹果的官方文档和WWDC的视频,百度出来的这些教程,我实在受不了。。。最后还是自已硬啃

aries4ever的专栏 1268

NSBundle简要介绍

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

KingOfOnePiece的博客 759

NSbundle

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

chuck_phonics的博客 316

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

1、[NSBundle mainBundle],文件夹其实是Group,如左侧的树形文件管理器 Build之后,文件直接就复制到了根目录下,于是读取的方法,应该是这样: NSString *earth = [[NSBundle mainBundle] pathForResource:@"Brad Cox" ofType:@"png"]; 2、使用文件夹的时候,Bui

huifeidexin_1的专栏 7331

[[NSBundle mainBundle] infoDictionary]

[[NSBundle mainBundle] infoDictionary] 返回的是一个数据字典内容如下: (XX1 为当前应用的名字 也就是app 包的名字 )--( 部分地方 XX 大写 我隐藏了部分信息...... )  ios 应用发布后 .app 应用文件内 ::{     CFBundleDevelopmentRegion = en;     CFBundle

Mr.xiaoma.wen 998

[NSBundle mainBundle] infoDictionary

[NSBundle mainBundle] infoDictionary获取到的是当前程序的信息,通过控制台打印出下面这些信息 { BuildMachineOSBuild = 16B2657; //mac 版本 CFBundleDevelopmentRegion = en; //本地化设置,默认为en CFBundleExecutable =

Bright 1118
上一篇: IOS开发之----NSArray和NSMutableArray
下一篇: NSRange and NSString对象
SKyu4
博客等级 码龄12年 11粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值