исключая ошибка доступа к iphone - PullRequest
0 голосов
/ 17 апреля 2011

Я получаю сообщение об ошибке. Поток 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 голос
/ 17 апреля 2011

Скорее всего, что-то выпускается слишком много раз.Включите обнаружение зомби и попробуйте снова.

Однако, прежде чем сделать это, попробуйте выполнить «Построить и проанализировать» свой код и исправить все проблемы, которые он идентифицирует.

Я вижу, что это помеченос "безопасностью потока".Зачем?Т.е. что потенциально могут делать другие потоки во время работы вышеприведенного кода?

0 голосов
/ 17 апреля 2011

Мне кажется, я знаю, что происходит.Ваша строка пути теряет область видимости внутри метода findGamePath.

Вы выделяете строку пути внутри этого метода и возвращаете ее?

Как только она теряет область видимости, она освобождается из памяти.

Попытка получить доступ к этой строке вызовет EXC_BAD_ACCESS при доступе к освобожденному объекту.

Не могли бы вы опубликовать здесь код findGamePath?Это может прояснить проблему больше.

О, и это больше связано с управлением памятью, чем с безопасностью потоков.

0 голосов
/ 17 апреля 2011

EXC_BAD_ACCESS означает, что у вас где-то плохой указатель. Эти ошибки часто довольно легко обнаружить, поскольку неверный указатель является одним из параметров метода, вызываемого в строке, где происходит ошибка. В этом случае, однако, архиватор будет обходить весь граф объектов, на который указывает gamesArray, и плохой указатель действительно может быть где угодно. Следуйте советам @bbum по включению NSZombies - это поможет вам определить, какой указатель является проблемой.

...