簡體   English   中英

Cocos2d:不讀取plist文件

[英]Cocos2d: not reading plist file

您好,我正在制作一個cocos2d側滾動器。 我正在使用plist文件提供游戲數據。 由於某些原因,代碼未讀取plist文件,並且當我想顯示圖像並且圖像在plist文件中時,我收到SIGABRT錯誤。

這是plist文件: 在此處輸入圖片說明

這是導致錯誤的代碼:

+(id)createRedEnemyWithDictionary:(NSDictionary *)redEnemyDictionary{
return [[[self alloc]initWithDictionary:(NSDictionary*)redEnemyDictionary]autorelease];
}

-(id)initWithDictionary:(NSDictionary*)redEnemyDictionary{
if ((self = [super init])) {
    //Make the redEnemy
    redEnemySprite = [CCSprite spriteWithFile:[redEnemyDictionary    objectForKey:@"RedEnemyBaseImage"]];
    [self addChild:redEnemySprite];

這是我得到的錯誤:

***-[CCSprite initWithFile:]中的斷言失敗

這是我的異常斷點指向的代碼行:

NSAssert(filename != nil, @"Invalid filename for sprite");

通過優化代碼的可讀性(也意味着“可記錄性”)使生活更輕松。 代替這個:

redEnemySprite = [CCSprite spriteWithFile:
    [redEnemyDictionary objectForKey:@"RedEnemyBaseImage"]];

重寫如下:

NSString* img = [redEnemyDictionary objectForKey:@"RedEnemyBaseImage"];
NSLog(@"using image file: %@", img);
redEnemySprite = [CCSprite spriteWithFile:img];

額外的臨時變量img允許您在設置調試斷點時檢查img變量的內容,巧合的是,您也可以記錄它。

如果您記錄為nil,則通過記錄字典來檢查字典:

NSLog(@"dict: %@", redEnemyDictionary);

嵌套字典結構中的一個常見錯誤是忘記索引字典中的子路徑。 即,上面的plist是一個包含鍵“字符”的字典,這是另一個字典,其“ RedEnemy”鍵包含另一個帶字符串的字典。 如果您只忘記其中一個鍵或輸入錯誤,則返回的對象將為nil,隨后對“ nil object”字典的所有后續訪問也將為nil。

如果您知道如何設置斷點,單步執行代碼並在調試器中檢查變量,則這些東西很容易調試。 如果您不熟悉這些過程,則應閱讀Xcode調試指南

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM