【问题标题】:Message sent to Deallocated Instance - in Singleton [closed]消息发送到 Deallocated Instance - 在 Singleton [关闭]
【发布时间】:2012-10-07 03:40:04
【问题描述】:

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

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

这是单例中的代码

在初始化中:

 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 已分配,我从未发布过它.. 还是我遗漏了什么?请帮忙!

【问题讨论】:

  • 你确定你不是想让 NSAssert 成为这个 NSAssert(_enemyPaths == nil, @"Couldn't open EnemyPaths file");
  • 呃,谢谢你,我是一个白痴更新,如果我现在能弄清楚这个问题,编辑。
  • errrrr 实际上,当我设置为 == nil 时,它不会读取文件,但它很好,并且将数据读取为 != nil
  • 10 个敌人的 10 个变量?你知道如何设置字典,为什么不将敌人也放入数组中?
  • 哈哈,它们实际上是 10 个用于敌人路径的阵列。每个数组都对应着敌人。我在这里发布时更改了变量名称,因为我觉得我很酷:\

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


【解决方案1】:

已解决。我相信这些项目没有被复制并被直接使用,切换到复制每个项目,一切都很好。通话时一定是空字典。

【讨论】:

    猜你喜欢
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多