之前在開源中國(guó)看到一個(gè)求源代碼的問題:
模擬一個(gè)動(dòng)物園系統(tǒng)MyZoo
1、動(dòng)物園里面有三種動(dòng)物:Panda,Elephant,Kangaroo
2酱畅、三種動(dòng)物都有一定的數(shù)量(不止一只)
3、動(dòng)物有各自不同的食量(以天為單位的食量),并且每天都在消耗食物。
4、動(dòng)物園里的食物有固定的儲(chǔ)備,而且假設(shè)三種動(dòng)物都吃這一種食物冀惭。
5、每個(gè)動(dòng)物都有不同的生產(chǎn)周期,每當(dāng)?shù)搅诉@種動(dòng)物的生產(chǎn)周期,動(dòng)物園就會(huì)出現(xiàn)一位新生寶寶(假設(shè)其食量和成年動(dòng)物是一樣的)掀鹅。
6散休、在主循環(huán)里模擬動(dòng)物園的運(yùn)轉(zhuǎn)情況,要求在控制臺(tái)上輸出如下內(nèi)容:第幾天、動(dòng)物的數(shù)量乐尊、動(dòng)物園飼料的余量,直到飼料不夠吃為止戚丸。
7、動(dòng)物的數(shù)量,食量,生產(chǎn)周期,飼料總量都應(yīng)該是可以配置的(在同一個(gè)文件中統(tǒng)一配置)
因此創(chuàng)建了一個(gè)OS X Project扔嵌,使用plist當(dāng)做這個(gè)動(dòng)物園系統(tǒng)的初始數(shù)據(jù)的配置限府,代碼結(jié)構(gòu)如下:
在main.m文件中實(shí)現(xiàn)上述題目的要求:
#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;
}
而這個(gè)時(shí)候遇見了問題,下面這句代碼:
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];
在執(zhí)行時(shí)一直是null宜狐,無法找到文件路徑势告。而后在iOS Application Project -- Single View Application中,plistPath是正確值,這下就不知道問題是什么了抚恒≡厶ǎ看了[NSBundle mainBundle]
中對(duì)于不同文件夾使用不同的方法,確定將文件放在工程下是使用上述代碼。最后嘗試各種方法俭驮,找到了一種解決方案:
如上圖所示回溺,在Build Phase中Compile Sources中添加data.plist文件即可。