我收到一个名为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”]; 返回结果; }
答案 0 :(得分:1)
更有可能的是,有些东西被释放了太多次。打开僵尸检测并重试。
在此之前,请尝试对代码执行“构建和分析”并修复它识别出的任何问题。
我看到它标有“线程安全”。为什么?即在上面的代码运行时,其他线程可能正在做什么?
答案 1 :(得分:0)
EXC_BAD_ACCESS意味着你的某个地方有一个糟糕的指针。这些错误通常很容易发现,因为错误的指针是发生错误的行上调用的方法的参数之一。但是,在这种情况下,归档程序将遍历gamesArray指向的整个对象图,并且坏指针实际上可以在那里的任何位置。按照@ bbum的建议启用NSZombies - 这将帮助您找出问题所在的指针。
答案 2 :(得分:0)
我想我知道发生了什么。您的路径字符串在findGamePath方法中丢失范围。
您是否在该方法中分配路径字符串并将其返回?
一旦失去范围,它就会从内存中释放出来。
当您访问已发布的对象时,尝试访问该字符串会导致EXC_BAD_ACCESS。
你可以在这里发布findGamePath代码吗?这可能会更多地澄清这个问题。
哦,这与内存管理有关,而不是线程安全。