Сбой приложения только на устройстве iPhone, а не в симуляторе - PullRequest
1 голос
/ 08 декабря 2011

В моем приложении, когда я нажимаю кнопку, метод, вызываемый для этой кнопки, сначала присваивает тексты моего текстового поля непосредственно объекту NSArray, например:

 val = [[NSArray alloc] initWithObjects: nameText.text, cellText.text, p_emText.text, 
                                      p_cnfrmText.text, s_emText.text, s_cnfrmText.text,
                                      emailText.text, ecnfrmText.text, lat, longt,  
                                      nil];

, когда я запускаю свое приложение на симуляторе, приложение не падаетпроисходит, но когда я запускаю его на своем устройстве iPhone, он дает: Thread 1: program recieved signal "EXC_BAC_ACCESS"

Кто-нибудь может сказать, почему это происходит и каково решение для этого сценария?

Ответы [ 5 ]

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

В XCode перейдите в меню «Редактировать схему», выберите рабочую конфигурацию и добавьте «NSZombieEnabled», как показано на рисунке ниже, когда ваши приложения аварийно завершают работу, это даст вам дополнительную информацию о сбое, которая должна помочь вам отладить ее.

enter image description here

EDIT

Обратите внимание, что после завершения отладки приложения удалите команду NSZombieEnabled, поскольку она влияет на производительность приложения

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

Все объекты, задействованные в создании массива с использованием initWithObjects, должны быть фактическими объектами. В вашем вопросе недостаточно кода, чтобы знать, являются ли lat и longt объектами. Они?

Если нет, оберните их [NSNumber numberWithFloa:<# the float #>].

Если это не проблема, проверьте SO вопросы относительно EXC_BAC_ACCESS, чтобы научиться их отлаживать.

0 голосов
/ 24 ноября 2012

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

Если у вас есть пользовательские объекты, которые вы выделяете и инициализируете как;

MyCustomClass * myObject = [[MyCustomClass alloc] init];

вам нужно освободить их как

[myObject release];

особенно, если у них есть члены, которым назначены изображения большого размера или данные другого типа.

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

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

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

имитатор имеет пространство памяти всей машины ... но iphone имеет определенную памятьпесочница для одного приложения.

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

Удалить приложение из симулятора / удалить файл сборки из Mac / очистить продукт из XCode, а затем снова запустить его в симуляторе.Проверьте, не падает ли он сейчас в симуляторе.

Посмотрите по этой ссылке: Получен сигнал EXC_BAD_ACCESS .Также возьмите NSLog всех textfield.texts перед тем, как поместить их в массив.Может быть, один из них стал ноль.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...