2012-07-05 5 views
2

В моем приложении диаграмму в одном представлении можно перетащить во второе представление, чтобы новый график заменил второй вид (например, эффект копирования/вставки с функцией перетаскивания). Приложение работает, если протокол делегата вынимается, так что второе представление обрабатывает изменение самой функции. При добавлении протокол, приложение падает в главном файле вПриложение сбой в основном после добавления протокола делегата; код ошибки

return UIApplicationMain(argc, argv, nil, NSStringFromClass([Load_CreatorAppDelegate class]));. 

Существует не ошибка выхода, кроме стандартных (lldb). Даже когда я вывожу вызов делегату (сохраняя код), приложение вылетает. Я знаю, что он должен быть связан с кодом протокола, хотя, потому что он работал хорошо до этого.

Вот часть кода для второй точки зрения (BeamView):

[self drawSupportsAtLeftPoint:self.beamBottomLeft rightPoint:self.beamBottomRight inContext:context :leftPin :rightPin]; 

BOOL pt = NO; 
if (self.tempLoad) { 
    //self.loadGraph = [self.dataSource changeToTempLoad:self]; NOTE #1 
    //if (self.tempPtLoad.x != 0 || self.tempPtLoad.y != 0) pt = YES; 
    pt = [self changeLoad]; 
    [self drawLoadWithFunction:self.loadGraph inContext:context fromPoint:self.beamTopLeft toPoint:self.beamTopRight withAlpha:0.3 isPointLoad:pt inBlack:YES]; 
} 
else { 
    self.loadGraph = ^(int x) {return x/15;}; 
    [self drawLoadWithFunction:self.loadGraph inContext:context fromPoint:self.beamTopLeft toPoint:self.beamTopRight withAlpha:1 isPointLoad:pt inBlack:NO]; 
} 

self.tempLoad = NO; 

Примечание # 1: Эти строки, которые закомментированы являются те, которые требуют от делегата. Эти два метода и их реализация являются единственными изменениями, которые я сделал.

Я полностью смущен, любая помощь будет принята с благодарностью. Каковы возможные причины, по которым приложение будет разбиваться в главном файле?

+0

Аварийная сигнализация указывает эту строку как ошибку из-за неправильной функции в Xcode, которая была представлена ​​с выпусками серии 4.x. В принципе, неперехваченное исключение по умолчанию не сообщается, пока оно не достигнет верхнего уровня вашего приложения, а затем трассировка стека исключений не сообщается. Иногда это помогает подойти к контролеру точки прерывания и добавить перерыв в неперехваченных исключениях Objective-C; чаще всего это помогает обернуть строку из «main», которую вы указали в @ try/@ catch, а затем NSLog описание исключения и callStackSymbols. –

+0

Спасибо, @PhillipMills - я сделал следующее: '@try { @autoreleasepool { return UIApplicationMain (argc, argv, nil, NSStringFromClass ([Load_CreatorAppDelegate class])); } } @catch (NSException * exception) { NSLog (исключение @ @ исключение:% @); [NSThread callStackSymbols]; } ' Это вы имели в виду? Программа по-прежнему рушится по главной линии и ничего не выводит –

+0

Закрыть. Я бы отправился с '@try { @autoreleasepool { return UIApplicationMain (argc, argv, nil, NSStringFromClass ([Load_CreatorAppDelegate class])); } @catch (исключение NSException *) { NSLog (@ "Исключение:% @, Стек:% @", [исключение] не вижу причин для моей работы над этим. Другим вариантом было бы перемещение @ try/@ catch туда, где, по вашему мнению, генерируется фактическая ошибка. –

ответ

0

Ok! Я чувствую себя глупо, но оказалось, что крушение не имело ничего общего с делегацией (ну, вроде). Я удалил выходы в файле ViewController.m, не отсоединяя их в IB, что вызывало крах.

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

Смежные вопросы