EXC_BAD_ACCESS с частичнымMockForObject и UIView - PullRequest
1 голос
/ 14 ноября 2011

У меня проблемы с OCMock и UIView.

У меня есть такой код:

UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
id view1Mock = [OCMockObject partialMockForObject:view1];

[[[view1Mock expect] andForwardToRealObject] removeFromSuperview];

... something ...

[view1Mock verify];

И я действительно часто получаю EXC_BAD_ACCESS на [[[view1Mock Ожидаем] andForwardToRealObject] removeFromSuperview].Но не каждый раз.Это довольно раздражает, потому что я не могу отследить его до строки на OCMock, и это происходит не каждый раз.

Есть идеи?

РЕДАКТИРОВАТЬ:

Я использую новый AppleКомпилятор LLVM 3.0 с включенным ARC, и я думаю, что это может быть причиной.Но я бы хотел это исправить.Кто-нибудь пробовал скомпилировать OCMock с ARC?

С наилучшими пожеланиями, Даниэль

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

Строка, где вы иногда получаете EXC_BAD_ACCESS, может быть подсказкой о причине проблемы.Хотя это не точно.Оскорбительный код может быть в другом месте.

Конечно, ваш код выше выглядит хорошо.Пока вы выполняете release на view1 в какой-то момент позже.

Операции пользовательского интерфейса должны выполняться в главном потоке.Однако это не вызовет EXC_BAD_ACCESS или любое другое явное исключение.

Итак, чтобы найти основную причину проблемы, первым делом нужно запустить Analyzer.Затем используйте инструмент Leaks в инструментах.

Для получения подробной информации, а также отличной ссылки о причинах этих ошибок и пошаговых инструкций по их устранению, посмотрите ответы на следующие вопросы:

поиск причиныдля EXC_BAD_ACCESS - в Xcode4

Случайный EXC_BAD_ACCESS в месте, где это не может произойти

1 голос
/ 08 декабря 2011

Поскольку «removeFromSurperview» является методом пользовательского интерфейса, возможно, его следует выполнить в основном потоке.

С уважением,

...