Странная задача Objective-C - PullRequest
2 голосов
/ 15 июля 2010

Мое приложение имеет контроллер навигации и два представления: firstController и secondController.firstController имеет веб-представление, которое отображает HTML-страницу со ссылками, и нажатие на любую ссылку приведет пользователя к secondController.Здесь программа останавливается, проходя через отладчик.

См. Приведенный ниже код.

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        secondController *nextController = [[secondController alloc] init];

        [self.navigationController pushViewController:nextController animated:YES];
        [nextController release];

        return NO;
    }
    return YES;
}

Это работает нормально, за исключением случаев, когда я перемещаюсь от firstController к secondController, нажимая любую ссылку на firstControllerв третий раз приложение просто закрывается. (щелчок ссылки firstController, нажатие кнопки secondController, нажатие ссылки firstController, нажатие кнопки secondController, нажатие ссылки firstController и приложение падает,)', причина:' *** - [Длина NSCFSet]: нераспознанный селектор отправлен на экземпляр 0x251f100 '

Это так странно.Я попробовал все, но все еще не мог понять, что пошло не так.

Ответы [ 2 ]

2 голосов
/ 15 июля 2010

У вас проблема с памятью, когда некоторому объекту отправляется сообщение длины, но этот объект давно ушел и его память занята объектом NSCFSet.Там есть объяснение ошибки.Теперь об ошибке.

Вы можете попытаться не выпускать nextController так быстро, но подождите немного дольше;используйте autorelease, чтобы nextController оставался в живых по крайней мере до того момента, пока ваше приложение не вернется в какой-либо режим ожидания.Итак:

secondController *nextController = [[[secondController alloc] init] autorelease];

В противном случае углубимся во внутреннюю работу secondController.

0 голосов
/ 15 июля 2010

Используйте NSSet count , если вы хотите знать, сколько элементов в вашем наборе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...