«Нормальная» кнопка UIB вызывает исключение obj_stack_overflow или EXC_BAD_ACCESS
Это выглядит достаточно безобидным. В моем приложении делегат я проверяюNSUserDefaults для флага, чтобы показать советы при запуске. Если это установлено, то в концеapplicationDidFinishLaunching:
, Я делаю это:
TipsViewController *vc = [[TipsViewController alloc]
initWithNibName:@“TipsView" bundle:nil];
[window addSubview:vc.view];
[vc release];
Идея состоит в том, чтобы показать эту точку зрения временно. (Обратите внимание, что это не модальный VC. На данный момент нет контроллера навигации, плюс в любом случае в этом представлении нет панели навигации.)
Как только эта точка зрения будет отклонена, мы добавим нашу приоритетнуюUITabBarControllerОткройте окно и перейдите к нему, затем удалите представление наконечника из главного окна. Я еще не дошел до точки увольнения, потому что, ну, продолжайте читать.
VC моего TipsView подключен примерно так:
UIView -> view -> File’s Owner (TipsViewController)
UIImageView -> background image
UIView -> tipView -> File’s Owner
UIImageView -> background image
UIScrollView
UILabel (tip text)
UIButton -> touch-up-inside -> -(IBAction)button1:
UIButton -> touch-up-inside -> -(IBAction)button2:
UIButton -> touch-up-inside -> -(IBAction)button3:
Источник содержит объявления и определения для всех трехIBAction звонки. Прямо сейчас двое из них ничего не делают. Третий меняет чаевыеtext
, изменяет размер, чтобы соответствовать, и регулирует представление прокруткиcontentSize
чтобы соответствовать.
Когда я запускаю приложение,TipsViewController вид показывает просто отлично. Я даже могу прокрутить текст подсказки. Тем не менее, когда я запускаю касание внутри на любомUIButton, Xcode начинает сажать меня в источник (где я ставил точку останова на каждомIBAction)… А затем выручает либоEXC_BAD_ACCESS
или жеobj_stack_overflow
.
Я сравнил это с другими частями приложения, где у меня есть VC, представление и кнопки. Он идентичен во всех отношениях, за исключением того, что в этом случаеЯ добавил вид ВК как подпредставление окна приложения вместо того, чтобы помещать ВК на контроллер навигации, Кроме того,View Controller Руководство по программированию для iPhone OS Документы говорят, что это честная игра:
Если вы используете один контроллер представления в своем приложении, вы добавляете его представление в окно вместо добавления контроллера представления на панель вкладок или контроллер навигации.
Правда яделать иметьUITabBarController ждет своего часа, и у него есть вкладки сUINavigationControllers (и другие ВК) в нем. Однако, если отображается вид подсказки, вид контроллера панели вкладок имеетне еще был добавлен в окно. Намерение состоит в том, чтобы заменить его после того, как мы закончили показывать советы. Другими словами, для всех намерений и целей мы временно действуем так, как будто у нас в игре есть один VC. После этого переключаемся на панель вкладок и сносим подсказку ВК.
Возможно, я делаю что-то не так? Есть ли способ лучше? («Должен быть лучший способ!»)
Пример стека трассировки:
#0 0x992b6f52 in objc_exception_throw
#1 0x302d6ffb in -[NSObject doesNotRecognizeSelector:]
#2 0x3026e056 in ___forwarding___
#3 0x3024a0a2 in __forwarding_prep_0___
#4 0x308f79d1 in -[UIApplication sendAction:to:from:forEvent:]
#5 0x309598b1 in -[UIControl sendAction:to:forEvent:]
#6 0x3095bad2 in -[UIControl(Internal) _sendActionsForEvents:withEvent:]
#7 0x3095a81e in -[UIControl touchesEnded:withEvent:]
#8 0x30910fdf in -[UIWindow _sendTouchesForEvent:]
#9 0x308faecb in -[UIApplication sendEvent:]
#10 0x309013e1 in _UIApplicationHandleEvent
#11 0x32046375 in PurpleEventCallback
#12 0x30245560 in CFRunLoopRunSpecific
#13 0x30244628 in CFRunLoopRunInMode
#14 0x32044c31 in GSEventRunModal
#15 0x32044cf6 in GSEventRun
#16 0x309021ee in UIApplicationMain
#17 0x00002888 in main at main.m:14
Как вы можете видеть из следа, мы в конечном итоге вdoesNotRecognizeSelector:
... за исключением того, что я ясно вижу методы в моем источнике VC. Кроме того, они все подключены. (В IB нет многократных соединений или чего-то подобного. Там все выглядит хорошо, вплоть до отношений Владельца Файла.)
Подсказки приветствуются / приветствуются!