Ios Cocos2d:不读取plist文件
你好,我正在制作一个cocos2d侧滚动条。我正在使用plist文件来提供我的游戏数据。由于某种原因,代码没有读取plist文件,当我想显示图像,并且图像在plist文件中时,我得到一个SIGABRT错误 以下是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*
+(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文件中为红敌使用的相同方法来实现这一点