UIButton, созданный Интерфейсным Разработчиком, терпит крах

Я сузил некрасивую ошибку, но поскольку она кажется чем-то внутренним для nib / Interface Builder, я не знаю, что делать дальше.

У меня есть UIView, созданный в IB, который функционирует как пользовательское диалоговое окно. Это показывает сообщение и две кнопки. (Продолжить или Отмена.) Обе кнопки имеют Фоновое изображение, установленное в Интерфейсном Разработчике.

Что-то не так с обработкой фонового изображения для кнопки отмены. С NSZombieEnabled я запускаю программу. Чаще всего метод ниже регистрирует это:

-[ModalDialog showInView:title:message:cancelText:proceedText:]
dialogProceedButton <UIButton: 0x7031f10; frame = (286 192; 90 31) // (etc.)
dialogProceedButtonBackground <UIImage: 0x3b36120>
dialogCancelButton <UIButton: 0x3b39cd0; frame = (104 192; 90 31) // (etc.)
dialogCancelButtonBackground <UIImage: 0x3b3a920>

Это совершенно нормально. Тем не менее, иногда это происходит (я могу заставить это повторить несколько надежно, если я «тороплю» интерфейс, быстро нажимая некоторые кнопки интерфейса):

-[ModalDialog showInView:title:message:cancelText:proceedText:]
dialogProceedButton <UIButton: 0x7031f10; frame = (286 192; 90 31) // (etc.)
dialogProceedButtonBackground <UIImage: 0x3b36120>
dialogCancelButton <UIButton: 0x3b39cd0; frame = (104 192; 90 31) // (etc.)
*** -[UIImage retain]: message sent to deallocated instance 0x3b3a920

Как вы можете видеть, NSZombieEnabled обнаружил, что фоновое изображение для кнопки «Отмена» было освобождено, но отправляется сообщение сохранения. (Не мной, хотя ... это изображениетолько используется для этой кнопки, итолько Доступ в Интерфейсном Разработчике. У меня нет ни IBOutlets, ни каких-либо переменных, связанных с этим изображением.)

Ну и что теперь?

РЕДАКТИРОВАТЬ:

Иногда это не удерживающее сообщение, которое ловится как зомби, иногда это isKindOfClass:

//(the object address is always dialogCancelButton.currentBackgroundImage)
-[UIImage isKindOfClass:]: message sent to deallocated instance 0x1661f0
//occasionally, these come along, too:
*** NSInvocation: warning: object 0x7e0d0b0 of class '_NSZombie_UIImage' does not implement methodSignatureForSelector: -- trouble ahead
*** NSInvocation: warning: object 0x7e0d0b0 of class '_NSZombie_UIImage' does not implement doesNotRecognizeSelector: -- abort

Это мой пользовательский метод UIViews "showInView":

- (void)showInView:superView 
             title:(NSString*)title 
             message:(NSString*)message 
             cancelText:(NSString*)cancelText 
             proceedText:(NSString*)proceedText {

NSLog(@"%s",__PRETTY_FUNCTION__);
NSLog(@"dialogProceedButton %@", dialogProceedButton);
NSLog(@"dialogProceedButtonBackground %@", dialogProceedButton.currentBackgroundImage);
NSLog(@"dialogCancelButton %@", dialogCancelButton);
NSLog(@"dialogCancelButtonBackground %@", dialogCancelButton.currentBackgroundImage);



CGRect rect;
dialogTitle.text = title;
dialogMessage.text = message;
[dialogProceedButton setTitle:proceedText forState:UIControlStateNormal];

if (cancelText == @"") { // SINGLE BUTTON DIALOG
  dialogCancelButton.hidden = YES;
  rect = [dialogProceedButton frame];
  rect.origin.x = 195; //center the button 
  [dialogProceedButton setFrame:rect];
} else {
  [dialogCancelButton setTitle:cancelText forState:UIControlStateNormal];
  dialogCancelButton.hidden = NO;
  rect = [dialogProceedButton frame];
  rect.origin.x = 286; //button on right of dialog box 
  [dialogProceedButton setFrame:rect];
}

[UIView beginAnimations:@"modalAppears" context:nil];
[UIView setAnimationDuration:0.5];
[superView addSubview:self];
self.alpha = 1.0;
[UIView commitAnimations];
}

Спасибо!

Ответы на вопрос(2)

Ваш ответ на вопрос