错误访问iphone错误

时间:2011-04-17 04:59:20

标签: iphone memory-management thread-safety xcode4 exc-bad-access

我收到一个名为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 个答案:

答案 0 :(得分:1)

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

在此之前,请尝试对代码执行“构建和分析”并修复它识别出的任何问题。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

您是否在该方法中分配路径字符串并将其返回?

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

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

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

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