Изучить раздел: Отменить публичные коммиты с возвратом в блог Atlassian https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting
Я немного изменил его, чтобы представление загрузки показывалось после небольшой задержки, и это отлично работает! Так что, похоже, это что-то в том же цикле событий!
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// Show load
[self performSelector:@selector(doit) withObject:nil afterDelay:0.1];
}
- (void)doit {
[self presentModalViewController:loader animated:YES];
}
EXC_BAD_ACCESS
- ошибка памяти. Вероятно, вы пытаетесь использовать объект, который уже был освобожден / освобожден. Этот ответ дает несколько советов по устранению этих проблем:
Это действительно зависит от того, что делают процедуры поддержки для viewDidAppear
. Например, если presentModalViewController: animated:
не сохраняет загрузчик
, сбой может быть вызван тем, что UIWindowController
пытается говорить о загрузчике
, который с тех пор был выпущен (в конце процедуры, которую вы опубликовали).
Ваша проблема, скорее всего, в методе, который инициирует и представляет метод, в котором находится viewDidAppear, или в методе init / viewDidLoad / viewWillAppear LoadViewController.
Установите несколько точек останова и выполните до аварии ...
Я думаю, что эта проблема как-то связана с проблемой, с которой я тоже столкнулся. Это очень легко воспроизвести:
Создайте новый проект XCode «Служебное приложение». В FlipsideViewController.m вы просто вставляете следующий метод:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear: animated];
[self showInfo];
}
Если вы это сделаете, запустите приложение, тогда сразу же активируется обратное представление. Как только вы нажмете кнопку «Готово» на обратном просмотре, вы вернетесь к основному просмотру, который снова запустит viewDidAppear и вернется к обратному виду - . Как только отображается обратное представление, приложение останавливается - освобождающие память не вызываются - это как если бы вы нажали кнопку «домой».
Когда я использовал некоторые дополнительные свойства в этих представлениях, у меня также было исключение, поэтому я сократил код до минимального количества ...
Я действительно понятия не имею, в чем проблема действительно ...
С уважением, Тобиас
У меня была аналогичная проблема при использовании той же техники, что и вы, для реализации представления загрузки. Он вылетал, когда представление загрузки было закрыто в конце загрузки. В моем случае проблема возникла из-за того, что как только представление загрузки было закрыто, viewDidAppear был вызван снова и попытался представить загрузку еще раз, что предположительно вызвало сбой. Я исправил это, просто проверив, было ли ранее представлено представление загрузки:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if(needDisplayLoader)
[self presentModalViewController: loader animated:NO];
}
Затем я установил для needDisplayLoader значение NO перед тем, как закрыть представление загрузчика
Надеюсь, это поможет. ..
Я столкнулся с этой проблемой только сейчас и исправил ее с помощью предложенного выше selector: afterDelay. Чтобы добавить, я скомпилировал (без исправления) под бета-версию iPhone OS 4.0, и НЕТ АВАРИИ! Итак, ошибка в XCode, похоже, была исправлена в следующем поколении. Не то чтобы это принесло пользу кому-либо из нас сегодня, но, чтобы вы все знали, это действительно было ошибкой в Xcode, и не обязательно что-то, что мы делали неправильно в наших стилях кодирования.
Мне кажется, я воспроизвел ту же ошибку в iOS 4. В моем приложении сбой происходил постоянно при попытке отобразить второе модальное представление сразу после отображения первого модального представления. Я боролся несколько часов с ума.
Прочитав сообщения в этой теме, я попытался создать простой воспроизводимый пример, используя шаблон приложения панели вкладок. Я смог использовать UIImagePickerController, чтобы показать первое модальное представление после ответа на нажатие кнопки в «FirstViewController.m». Когда я попытался снова показать UIImagePickerController (после обработки сообщения imagePickerControllerDidCancel), приложение вылетело с той же ошибкой.
На устройстве просто не было ни малейшего понятия, что происходит. Однако, когда я запустил код на симуляторе, мне посчастливилось получить это сообщение на консоли:
*** Завершение работы приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «Попытка начать модальный переход от к в то время как переход уже выполняется. Подождите, пока viewDidAppear / viewDidDisappear узнает, что текущий переход завершен '
Похоже, что мой единственный выбор - последовать совету сообщения об ошибке и просто дождаться viewDidAppear (используя флаг, указывающий, что я нахожусь в этом специальном режиме), а затем загрузить второе модальное представление.
Вот полная трассировка стека для полноты:
** Call stack at first throw: ( 0 CoreFoundation 0x0238c919 __exceptionPreprocess + 185 1 libobjc.A.dylib 0x024da5de objc_exception_throw + 47 2 CoreFoundation 0x02345078 +[NSException raise:format:arguments:] + 136 3 Foundation 0x000ab8cf -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116 4 UIKit 0x00544317 -[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:] + 212 5 UIKit 0x0035c769 -[UIViewController presentModalViewController:withTransition:] + 2937 6 TestTempDelete 0x000021cf -[FirstViewController showImagePicker] + 167 7 Foundation 0x0002fcea __NSFireDelayedPerform + 441 8 CoreFoundation 0x0236dd43 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19 9 CoreFoundation 0x0236f384 __CFRunLoopDoTimer + 1364 10 CoreFoundation 0x022cbd09 __CFRunLoopRun + 1817 11 CoreFoundation 0x022cb280 CFRunLoopRunSpecific + 208 12 CoreFoundation 0x022cb1a1 CFRunLoopRunInMode + 97 13 GraphicsServices 0x02bf12c8 GSEventRunModal + 217 14 GraphicsServices 0x02bf138d GSEventRun + 115 15 UIKit 0x002beb58 UIApplicationMain + 1160 16 TestTempDelete 0x00001eb4 main + 102 17 TestTempDelete 0x00001e45 start + 53
Надеюсь, это поможет.
Была точно такая же проблема. Решил это с помощью предложенного выше ...
[самостоятельно выполнитьSelector: @selector (doit) withObject: nil afterDelay: 0.5];
Пришлось использовать задержку 0,5 секунды. Возможно, потому что я выполнял presentModalViewController сразу после модального UIPickerViewController.
У меня только что возникла эта проблема, и она оказалась выяснилось, что моя проблема заключалась в том, что я освободил делегата от протокола.