Контроллер popover iOS alloc вызывает сбой - PullRequest
2 голосов
/ 07 декабря 2011

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

Пока у меня есть

-(void)changetablebuttonPressed:(id)sender{
UIButton *button = (UIButton*)sender;

changetableView = [[ChangeTableViewController alloc] initWithNibName:@"ChangeTableViewController" bundle:nil];
changetablePopover = [[UIPopoverController alloc] initWithContentViewController:changetableView];
[changetablePopover presentPopoverFromRect:button.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:TRUE];     
}

Код вызывает ошибку SIGABRT после попытки initWithContentViewController или даже просто init.Я проверил, что changetableView не равно нулю, и поэтому я в тупике!

Единственный пользовательский код в ChangeTableViewController находится в viewDidLoad и self.contentSizeForViewInPopover = CGSizeMake(320, 144);

Любойпредположения будут оценены.

РЕДАКТИРОВАТЬ : Исключение не выводится на консоль (я не думаю), вот весь вывод с включенными зомби:

GNU gdb 6.3.50-20050815 (Apple version gdb-1708) (Mon Aug 15 16:03:10 UTC 2011)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin".sharedlibrary apply-load-rules all
Attaching to process 7596.
Catchpoint 2 (throw)Pending breakpoint 1 - "objc_exception_throw" resolved

Catchpoint 2 (exception thrown).(gdb) bt
#0  0x03dc9a4f in __cxa_throw ()
#1  0x01745e15 in objc_exception_throw ()
#2  0x0155ca78 in +[NSException raise:format:arguments:] ()
#3  0x0155c9e9 in +[NSException raise:format:] ()
#4  0x001c7f0d in -[UIViewController _loadViewFromNibNamed:bundle:] ()
#5  0x001c83a9 in -[UIViewController loadView] ()
#6  0x001c85cb in -[UIViewController view] ()
#7  0x00596559 in -[UIPopoverController _transitionFromViewController:toViewController:animated:] ()
#8  0x00593b13 in -[UIPopoverController initWithContentViewController:] ()
#9  0x0000b7f7 in -[DetailViewController changetablebuttonPressed:] (self=0x6a510e0, _cmd=0x18af6, sender=0x6a696f0) at .../DetailViewController.m:385
#10 0x015b5ec9 in -[NSObject performSelector:withObject:withObject:] ()
#11 0x001055c2 in -[UIApplication sendAction:to:from:forEvent:] ()
#12 0x0010555a in -[UIApplication sendAction:toTarget:fromSender:forEvent:] ()
#13 0x001aab76 in -[UIControl sendAction:to:forEvent:] ()
#14 0x001ab03f in -[UIControl(Internal) _sendActionsForEvents:withEvent:] ()
#15 0x001aa2fe in -[UIControl touchesEnded:withEvent:] ()
#16 0x003c3a2a in _UIGestureRecognizerUpdate ()
#17 0x015889ce in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ ()
#18 0x0151f670 in __CFRunLoopDoObservers ()
#19 0x014eb4f6 in __CFRunLoopRun ()
#20 0x014eadb4 in CFRunLoopRunSpecific ()
#21 0x014eaccb in CFRunLoopRunInMode ()
#22 0x0149d879 in GSEventRunModal ()
#23 0x0149d93e in GSEventRun ()
#24 0x00102a9b in UIApplicationMain ()
#25 0x00002b42 in main (argc=1, argv=0xbfffed78) at .../main.m:16
#26 0x00002ab5 in start ()
Current language:  auto; currently objective-c
(gdb) 

1 Ответ

5 голосов
/ 10 декабря 2011

Проверьте свой кончик на мошеннический IBOutlet. Иногда это происходит, когда вы определяете представление (в Интерфейсном Разработчике) как один класс, а затем меняете его на другой класс, но не очищаете старые соединения. (Первоначально я заявлял, что это просто удаление розетки в вашем .h, но понял, что это был неправильный сценарий, и вспомнил правильный).

Вы ищете розетку с желтым треугольником справа, например:

enter image description here

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

...