плохой UIViewController - PullRequest
       38

плохой UIViewController

0 голосов
/ 28 июля 2011

У меня есть ОДИН viewController, который вызывает у меня проблему ...

UIViewController *nextController = [[NextView alloc] initWithNibName:@"NextView" bundle:nil];
[currentPageController.view removeFromSuperview];
[self.view addSubview:nextController.view];

Мое приложение падает здесь с EXC_BAD_ACCESS.

У кого-нибудь есть ЛЮБАЯ идея, что может вызвать это?

Заранее спасибо!

ОБНОВЛЕНИЕ

После использования точек останова и пошагового выполнения кода проблема, по-видимому, связана с этим битом кода вviewDidLoad моего viewController:

NSString *noteToSet;

        if ([Settings isData]) {
            noteToSet = [NSString stringWithFormat:@"Data, "];
        }
        if ([Settings isGeom]) {
            if ([noteToSet isEqualToString:@""]) {
                noteToSet = [NSString stringWithFormat:@"Geom, "];
            } else {
                noteToSet = [noteToSet stringByAppendingFormat:@"Geom, "];
            }
        }

Кто-нибудь видел проблему там?Большое спасибо!

ИСПРАВЛЕНО

Исправлено путем инициализации строки пустым значением @ ""

noteToSet = [NSString stringWithFormat:@""];

Ответы [ 3 ]

1 голос
/ 28 июля 2011

Итак, первая часть ответа - если ваш viewController не загружается, и вы не знаете, почему - проверьте код в viewDidLoad, вот где моя проблема, и это сводило меня с ума, пытаясь выяснить, в чем дело сам viewController, когда он все время был проблемой NSString в viewDidLoad.

Вторая часть заключается в том, что вы не можете сравнить NSString с пустым значением, используя [stringName isEqualToString: @ ""], если только вы не получили эту строку из NSUSerDefaults или если сначала вы не установили строку равной @ "".

0 голосов
/ 28 июля 2011

EXC_BAD_ACCESS часто вызывается плохим управлением памятью. Зайдите в меню сборки в Xcode и профилируйте его (в симуляторе) с помощью Allocations Затем зайдите и убедитесь, что у вас включены зомби. Запустите приложение в симуляторе и укажите его, где вы получите ошибку. Инструменты должны затем сказать вам, где плохое управление памятью. Если вы все еще не можете получить это, то скажите нам, что вы получаете.

Вот руководство: http://www.markj.net/iphone-memory-debug-nszombie/

0 голосов
/ 28 июля 2011

Я не вижу в опубликованном коде ничего, что могло бы вызвать исключение. Однако оба фрагмента кода, которые вы опубликовали, содержат строки:

currentPageController = nextController;
[currentPageController retain];
[nextController release];

Поскольку первая строка заставляет currentPageController указывать на тот же объект, что и nextController, вторая и третья строки взаимно уничтожают друг друга. Вы могли бы также написать:

currentPageController = nextController;

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

...