前几天因为在开源中国看到一个求源代码的问题:

模拟一个动物园系统MyZoo 

1、动物园里面有三种动物:Panda,Elephant,Kangaroo
2、三种动物都有一定的数量(不止一只)
3、动物有各自不同的食量(以天为单位的食量),并且每天都在消耗食物。
4、动物园里的食物有固定的储备,而且假设三种动物都吃这一种食物。
5、每个动物都有不同的生产周期,每当到了这种动物的生产周期,动物园就会出现一位新生宝宝(假设其食量和成年动物是一样的)。
6、在主循环里模拟动物园的运转情况,要求在控制台上输出如下内容:第几天、动物的数量、动物园饲料的余量,直到饲料不够吃为止。
7、动物的数量,食量,生产周期,饲料总量都应该是可以配置的(在同一个文件中统一配置)

  因此创建了一个OS X Project:

  使用plist当做这个动物园系统的初始数据的配置,代码结构如下:

  在main.m文件中实现上述题目的要求:

#import <Foundation/Foundation.h>
#import "Tool.h" int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
Panda *panda = [[Panda alloc] init];
Elephant *elephant = [[Elephant alloc] init];
Kangaroo *kangaroo = [[Kangaroo alloc] init]; //读取plist
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];
NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
NSLog(@"%@", plistPath); [Tool initWithAnimalDictionary:panda andDict:data];
[Tool initWithAnimalDictionary:elephant andDict:data];
[Tool initWithAnimalDictionary:kangaroo andDict:data]; int fooder_num = 0;
int surplus = 0;
int day = 1; NSDictionary *fooderDict = [data objectForKey:@"fodder"];
fooder_num = [[fooderDict objectForKey:@"count_num"] intValue];
surplus = fooder_num; while(surplus > 0){
if(0 == (day % [panda parturitionDays])){
[panda setCount:([panda count] + 1)];
}
if(0 == (day % [elephant parturitionDays])){
[elephant setCount:([elephant count] + 1)];
}
if(0 == (day % [kangaroo parturitionDays])){
[kangaroo setCount:([kangaroo count] + 1)];
}
surplus = fooder_num - ([panda count] * [panda foodConsumption] + [elephant count] * [elephant foodConsumption] + [kangaroo count] * [kangaroo foodConsumption]);
fooder_num = surplus; if(surplus){
NSLog(@"第 %d 天,熊猫:%d 只,大象:%d 头,袋鼠:%d 只,饲料余量:%d 。\n", day, [panda count], [elephant count], [kangaroo count], surplus);
}
day++;
}
}
return 0;
}

  而这个时候遇见了问题,下面这句代码:

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];

  在执行时一直是null,无法找到文件路径.而后在iOS Application Project

中,plistPath是正确值,这下就不知道问题是什么了.看了[NSBundle mainBundle]中对于不同文件夹使用不同的方法,确定将文件放在工程下是使用上述代码.最后尝试各种方法,找到了一种解决方案:

  如上图所示,在Build Phase中Compile Sources中添加data.plist文件即可.

  不过,虽然解决了,可是根本原因却没有想明白,现在拿出来,希望大神们不吝赐教,谢谢.

  需要源代码的可以在评论留下邮箱,欢迎指正.

iOS Application Project与OS X Application Project对于plist使用的区别的更多相关文章

  1. iOS 真机测试错误“The application bundle does not contain a valid identifier”

    iOS 真机测试错误"The application bundle does not contain a valid identifier" 真机测试的时候报错:"The ...

  2. iOS 真机测试错误“The application could not be verified”

    iOS 真机测试错误"The application could not be verified" 真机测试的时候报错:"The application could no ...

  3. ios 程序发布使用xcode工具Application Loader 正在通过ITUNES STORE进行鉴定错误

    ios 程序发布使用xcode工具Application Loader 正在通过ITUNES STORE进行鉴定错误 一:此错误会导致上传程序,一直停留在验证阶段,而没有一点上传进度:结果会苦等半天, ...

  4. 如何在eclipse jee中创建Maven project并且转换为Dynamic web project

    如何在eclipse jee中创建Maven project并且转换为Dynamic web project 注意:该文档只针对以下eclipse版本,如图 为了方便,我将我本地的压缩包放在了微云网盘 ...

  5. 一个Web Project引用多个Java Project在Eclipse下的配置--转载

    项目结构: 项目由一个Web Project和多个Java Project构成,Web Project需要引用其它Java Project的类和Jar包.开发时用Eclipse3.5和Tomcat调试 ...

  6. MyEclipse Web Project导入Eclipse Dynamic Web Project,无法部署到tomcat问 题

    做作业遇到一个小问题,将MyEclipse Web Project导入到Eclipse中开发.在部署到tomcat时,发现无法发布这个项目. 问题分析: MyEclipse Web Project被识 ...

  7. Failed to load project at 'xxx.xcodeproj', incompatible project version。

    Failed to load project at 'xxx.xcodeproj', incompatible project version. 更新最新的xcode,xcode高版本可以打开低版本的 ...

  8. solr File Upload "Unsupported ContentType: application/vnd.ms-excel Not in: [application/xml, application/csv, application/json, text/json, text/csv, text/xml, application/javabin]",

    今天在用solr管理界面导入文件时报错:"Unsupported ContentType: application/vnd.ms-excel  Not in: [application/xm ...

  9. 【软件project】菜鸟俯瞰软件project

    [背景]初次接触软件project,对软件project不是彻底的了解.但学完一遍软件project,我还是有些感触的. 以下我就对我这阶段的软工学习和理解做一下小小的总结,如有不妥之处.欢迎指正. ...

随机推荐

  1. ZOJ 1364 Machine Schedule(二分图最大匹配)

    题意 机器调度问题 有两个机器A,B A有n种工作模式0...n-1 B有m种工作模式0...m-1 然后又k个任务要做 每一个任务能够用A机器的模式i或b机器的模式j来完毕 机器開始都处于模式0 每 ...

  2. C语言基础(12)-输入和输出

    1. int scanf(const char *format, ...) 说明:scanf用于通过控制台输入字符串. 注意: (1).通过scanf()函数输入的字符串,系统会自动在其后面补一个0, ...

  3. oracle命令登录数据库

    sqlplus aa/aa@jdbc:oracle:thin:@10.200.130.111:1521:nbact 或者 sqlplus aa/aa@nbact

  4. Windows 7 SP1和Windows Server 2008 SP1的Event ID 10错误的解决方法

    安装了Windows 7 Service Pack 1 (SP1) 或 Windows Server 2008 R2 Service Pack 1 (SP1)都会遇到此错误提示. "Even ...

  5. MVC4的缓存

    目录(?)[+] MVC3缓存之一:使用页面缓存 在MVC3中要如果要启用页面缓存,在页面对应的Action前面加上一个OutputCache属性即可. 我们建一个Demo来测试一下,在此Demo中, ...

  6. Math函数的"四舍五入",Floor,Ceiling,Round的一些注意事项!

    1.Math.Round:四舍六入五取偶 引用内容 Math.Round(0.0) //0Math.Round(0.1) //0Math.Round(0.2) //0Math.Round(0.3) / ...

  7. ueditor 控制上传图片的显示尺寸

    使用UEditor的编辑框插入图片的时候,如果图片尺寸比较大,则图片会超出编辑器边框出现滚动条,特别不方便. 解决办法:在ueditor 的 themes 文件夹下有个iframe.css 文件,在该 ...

  8. HTML5实现端访问时禁止放大和缩小网页

    <title>html5禁止和移动.缩放网页</title><meta name="viewport" content="width=dev ...

  9. wchar与char字符转换的探究

    在Xcode 模拟器环境下.測试wchar_t与char的转换: void convert_test() { setlocale(LC_ALL, "zh_CN.UTF-8"); c ...

  10. HDU1087 Super Jumping! Jumping! Jumping! 最大连续递增子段

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...