消息发送到Deallocated Instance - 在Singleton中

时间:2012-10-16 23:13:31

标签: objective-c ios memory-management cocos2d-iphone

我看到很多这些问题都没有回答......希望有人可以帮助我。

所以我在我的应用程序中创建了一个单例,然后我重新加载一个场景,但是当我尝试访问敌人路径的数据时,它会收到此消息。

这是Singleton中的代码

在init中:

 NSString *resourcePath = @"EnemyPaths";
    NSString *levelDefsFile = [[NSBundle mainBundle] pathForResource:resourcePath ofType:@"plist"];
    _enemyPaths = [[NSDictionary alloc] initWithContentsOfFile:levelDefsFile];

当我重新加载场景时,我在单例中调用此函数来释放旧数据

-(void) resetGameData
{
    [enemy1 release];
    [enemy2 release];
    [enemy3 release];
    [enemy4 release];
    [enemy5 release];
    [enemy6 release];
    [enemy7 release];
    [enemy8 release];
    [enemy9 release];
    [enemy10 release];

    [self setupEnemyPaths];
}

-(void) setupEnemyPaths
{
    NSString *getLevel = [NSString stringWithFormat:@"Level%d", CURRENT_LEVEL];
    NSAssert(_enemyPaths != nil, @"Couldn't open EnemyPaths file");
    _level = (NSDictionary *) [_enemyPaths objectForKey:getLevel];
    NSAssert(_level != nil, @"Couldn't find Level entry");

...
}

我在

上收到错误
_level = (NSDictionary *) [_enemyPaths objectForKey:getLevel];

但是我不确定为什么 - _enemyPaths被分配了,我从来没有发布它......或者我错过了什么?请帮忙!

1 个答案:

答案 0 :(得分:0)

解决。我相信这些物品没有被复制并直接使用,切换到复制每个项目,一切都很好。必须在电话会议上结束空字典。