2012-06-18 1 views
0

У меня есть 2 UIViewControllers (A, B). A задается как делегат для B, а затем представлен B. Протокол устанавливается в заголовке Б:Objective-C делегат или self является морфинговыми классами

@protocol BDelegate <NSObject> 
- (IBAction)finishOrder:(id)sender; 

@end 

Делегат свойство объявлено:

@property (nonatomic, assign) id<BDelegate> delegate; 

А установлена ​​B.delegate = сам; Затем на нажатие кнопки B вызывает:

if (self.delegate) { 
     [self.delegate finishOrder:nil]; 
    } 

Однако на первый прогон lldb дает мне:

-[UITextInteractionAssistant finishOrder:]: unrecognized selector sent to instance 

второго запуска:

-[NSInvocation delegate]: unrecognized selector sent to instance 

третьего запуска:

-[__NSCFDictionary delegate]: unrecognized selector sent to instance 

следующий пробег:

-[UITextTapRecognizer finishOrder:]: unrecognized selector sent to instance 

Так ... нет код изменились, но сам изменились от А до NSInvocation и __NSCFDictionary и делегата B (самого А) не меняются на UITextInteractionAssistant и UITextTapRecognizer ... никогда ничего подобного не видели. Есть идеи? Благодаря!

+0

Все они выглядят как UITextStorageDelegate с внутренними проблемами – CodaFi

+0

Я даже не слышал о UITextStorageDelegate lol. Это простая пользовательская система делегатов. –

+0

Это внутренний делегат, используемый всеми редактируемыми текстовыми элементами управления в UIKit. – CodaFi

ответ

0

Вы где-то перевыпускаете. Попробуйте включить Zombies и используйте инструменты для отслеживания перевыпуска.

+0

Я использую ARC ... как бы я держу это в стороне? –

+0

@MatthewClark, если у вас есть назначенный делегат, попробуйте вместо этого использовать слабый. Это поможет предотвратить слишком рано освобождение предметов. –

+0

Попробуйте выполнить проверку времени выполнения с помощью -ответчикаToSelector: вместо делегата вместо проверки его существования. Затем запишите его класс. – CodaFi