iOS Application Project与OS X Application Project对于plist使用的区别

简介:

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


模拟一个动物园系统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文件即可.

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

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


目录
相关文章
|
2月前
|
物联网 vr&ar Android开发
探索安卓与iOS操作系统的未来发展趋势
【2月更文挑战第9天】本文将深入探讨安卓与iOS操作系统的未来发展趋势。通过分析当前技术发展和市场趋势,我们将探讨移动操作系统在人工智能、虚拟现实、物联网等领域的应用前景,以及如何满足用户需求并提升用户体验。同时,我们还将着重讨论两大操作系统在隐私保护、系统优化和生态建设方面的不断改进。
24 4
|
3月前
|
安全 Android开发 数据安全/隐私保护
请说明鸿蒙操作系统与其他操作系统(如Android和iOS)的主要区别。
请说明鸿蒙操作系统与其他操作系统(如Android和iOS)的主要区别。
58 1
|
23天前
|
搜索推荐 Android开发 iOS开发
安卓与iOS操作系统的发展与比较
在移动互联网时代,安卓和iOS两大操作系统在智能手机市场竞争激烈。本文将从技术架构、生态系统、用户体验等方面对安卓和iOS进行比较分析,探讨它们各自的特点和发展趋势。
|
1月前
|
搜索推荐 vr&ar Android开发
探索安卓与iOS操作系统的发展趋势
【2月更文挑战第10天】 随着移动技术的迅猛发展,安卓和iOS操作系统成为了市场上最主流的两个选择。本文将探讨安卓和iOS操作系统在技术和用户体验方面的发展趋势,并分析其对移动设备行业的影响。
|
2月前
|
人工智能 自然语言处理 Android开发
安卓与iOS操作系统的发展趋势与比较
【2月更文挑战第4天】 在移动互联网时代,安卓和iOS操作系统作为两大主流操作系统一直备受关注。本文将对安卓和iOS操作系统的发展趋势进行分析,并对它们进行比较,探讨它们在技术上的优劣势和未来发展方向。
24 1
|
2月前
|
Java 测试技术 API
安卓APP和iOS APP在测试上的区别是什么?
安卓APP和iOS APP在测试上的区别是什么?
|
3月前
|
安全 JavaScript 前端开发
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
65 0
|
8月前
|
Shell iOS开发
iOS 逆向编程(十)sh脚本(shell)编写与执行指令区别
iOS 逆向编程(十)sh脚本(shell)编写与执行指令区别
174 0
|
8月前
|
安全 小程序 iOS开发
iOS Odyssey 和 unc0ver 的区别
iOS Odyssey 和 unc0ver 的区别
402 0
|
11月前
|
安全 Linux iOS开发
Application Loader及Transporter App上传ipa外、可以在Windows上架iOS APP工具
添加图片注释,不超过 140 字(可选) 随着xcode的更新,苹果公司已经不直接提供Application Loader这个工具上传IPA了,导致上传ipa比较难搞了。