Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Cocos2d:不读取plist文件_Ios_Objective C_Exception_Cocos2d Iphone_Sigabrt - Fatal编程技术网

Ios Cocos2d:不读取plist文件

Ios Cocos2d:不读取plist文件,ios,objective-c,exception,cocos2d-iphone,sigabrt,Ios,Objective C,Exception,Cocos2d Iphone,Sigabrt,你好,我正在制作一个cocos2d侧滚动条。我正在使用plist文件来提供我的游戏数据。由于某种原因,代码没有读取plist文件,当我想显示图像,并且图像在plist文件中时,我得到一个SIGABRT错误 以下是plist文件: 这是导致错误的代码: +(id)createRedEnemyWithDictionary:(NSDictionary *)redEnemyDictionary{ return [[[self alloc]initWithDictionary:(NSDictionary*

你好,我正在制作一个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
变量的内容,同时也可以记录它

如果此日志记录为零,请通过记录来检查字典:

NSLog(@"dict: %@", redEnemyDictionary);
嵌套字典结构中的一个常见错误是忘记索引字典中的子路径。即上面的plist是一个包含键“Characters”的字典,该键是另一个字典,其“RedEnemy”键包含另一个带字符串的字典。如果您只忘记了一个键或输入了一个错别字,那么返回的对象将是nil,对“nil object”字典的所有后续访问也将是nil


如果您知道如何在调试器中设置断点、单步执行代码和检查变量,那么这些东西很容易调试。如果您对这些过程不熟悉,您应该阅读。

在代码中放置一些断点,并验证传递给init方法的字典内容是否符合您的预期。我想知道红色敌人精灵图片文件的名称,该文件存储在名为RedEnemyBaseImage的字典密钥中,但它说有在我的资源文件中没有与该文件名匹配的文件。我查过了,我确实有一张同名的照片。这也是我的应用程序的主要角色的一个问题,我正试图用我在字典和plist文件中为红敌使用的相同方法来实现这一点