首页 文章

错误访问iphone错误

提问于
浏览
0

我收到一个名为Thread 1的错误:程序收到的信号:“EXC_BAD_ACCESS”这里是我的代码

[gameArray removeLastObject];
[gameArray addObject:shotArray];
[gamesArray removeObjectAtIndex:gameNumber];
[gamesArray insertObject:gameArray atIndex:gameNumber];
NSString *path = [self findGamesPath];
[NSKeyedArchiver archiveRootObject:gamesArray toFile:path]; // the error is here

为什么会出错?是什么东西被释放了很多次?

这是findGamesPath代码

  • (NSString *)findGamesPath {NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); NSString * documentFolder = [paths objectAtIndex:0]; NSString * result = [documentFolder stringByAppendingPathComponent:@“iShotTrackGames.plist”];返回结果; }

3 回答

  • 1

    更有可能的是,有些东西被释放了太多次 . 打开僵尸检测并再试一次 .

    但是,在您这样做之前,尝试对代码执行“构建和分析”并修复它识别的任何问题 .

    我看到它标有“线程安全” . 为什么?即在上面的代码运行时,其他线程可能正在做什么?

  • 0

    EXC_BAD_ACCESS意味着你的某个地方有一个糟糕的指针 . 这些错误通常很容易发现,因为错误的指针是发生错误的行上调用的方法的参数之一 . 但是,在这种情况下,归档程序将遍历gamesArray指向的整个对象图,并且坏指针实际上可以在那里的任何位置 . 按照@ bbum的建议打开NSZombies - 这将帮助你找出哪个指针是问题所在 .

  • 0

    我想我知道发生了什么 . 您的路径字符串在findGamePath方法中丢失范围 .

    你在该方法中分配路径字符串并返回它吗?

    一旦失去范围,它就会从内存中释放出来 .

    当您访问已发布的对象时,尝试访问该字符串将导致EXC_BAD_ACCESS .

    你能在这里发布findGamePath代码吗?这可能会更多地澄清这个问题 .

    哦,这与内存管理有关,而不是线程安全 .

相关问题