`нераспознанный селектор, отправленный экземпляру <OBJ_ADR>` после отправки `dismissViewControllerAnimated: complete` в UIViewController - PullRequest
1 голос
/ 12 декабря 2011

Множество похожих вопросов, но не с решением, которое работает в моем случае.


Я пытаюсь написать простое приложение FlipSideApp. Всего два представления с одной кнопкой (flipBtn | flopBtn), чтобы представить другое представление наоборот. flip на первый взгляд работает нормально. flop с другой стороны вызывает
unrecognized selector sent to instance 0x6c3adf0.

Приложение вылетает после вызова [self dismissViewControllerAnimated:YES completion:nil]; в файле FlipSide.m (см. Код ниже). Где 0x6c3adf0 - текущий адрес self, который в данном случае является экземпляром FlipSide : UIViewController.

Так что я думаю, что нераспознанный селектор, упомянутый в сообщении об ошибке, является dismissViewControllerAnimated:completion -методом.
При наборе кода Xcode CodeSense «рекомендует» этот метод.

Согласно справочнику UIViewController этот метод известен в iOS 5.0 SDK.
Моя цель развертывания - 5.0, устройство iPhone, базовый SDK iOS 5.0, стандарт архитектуры (arm7).

С символической точкой останова, установленной для всех исключений, отладчик останавливается на UIApplicationMain в основной функции. Что ничего, что подсказывает мне.
Зомби-объекты включены. Даже когда я думаю, что утечки памяти здесь не проблема.

Что я могу сделать, чтобы селектор был распознан?



Файл: " AppDelegate.m "

#import "FirstViewController.h"

- (BOOL)application:(UIApplication *)application  
                  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

self.window = [[[UIWindow alloc]  
                      initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

// Override point for customization after application launch.
UIViewController *viewController1 = [[[FirstViewController alloc]  
                 initWithNibName:@"FirstViewController" bundle:nil] autorelease];

self.window.rootViewController = viewController1;
[self.window makeKeyAndVisible];
return YES;
}




Файл: " FirstViewController.h "

@interface FirstViewController : UIViewController

- (IBAction)flipBtn:(id)sender;

@end


Файл: " FirstViewController.m "

…
- (IBAction)flipBtn:(id)sender {

NSLog(@"%s -- reached --", __PRETTY_FUNCTION__);

FlipSide* flipSide = [[FlipSide alloc] initWithNibName:@"FLipSide" bundle:nil];
[self presentViewController:flipSide animated:YES completion:nil];    

NSLog(@"%s -- done --", __PRETTY_FUNCTION__);
}




Файл: " FlipSide.h "

@interface FlipSide : UIViewController 

- (IBAction)flopBtn:(id)sender;

@end


Файл: " FlipSide.m "

#import "FlipSide.h"

- (IBAction)flopBtn:(id)sender {

NSLog(@"%s -- reached --", __PRETTY_FUNCTION__);

NSLog(@"self address is: %@", self);

//  //  //      ??? unrecognized selector sent to instance ???
[self dismissViewControllerAnimated:YES completion:nil]; //  <--

NSLog(@"%s -- done --", __PRETTY_FUNCTION__);
}




Консоль Выход составляет:

-[FirstViewController flipBtn:] -- reached --
-[FirstViewController flipBtn:] -- done --
-[FLipSide flopBtn:] -- reached --
self address is: <FLipSide 0x6c3adf0>
-[FLipSide flopBtn:] -- done --
-[FLipSide flopBtn:]: unrecognized selector sent to instance 0x6c3adf0 

1 Ответ

3 голосов
/ 12 декабря 2011

Я получил решение сам!

Зная об этом, сообщение об ошибке имеет смысл:
Ответ лежит в используемых XIB-файлах.

Правило большого пальца:
Проверьте свои элементы GUI в InterfaceBuilder, нажав , щелкнув правой кнопкой мыши или "Ctrl" + нажав , чтобы все их отправленные события

Если это не так,
instance означает, что элемент GUI get sent a
unrecognized selector означает несуществующий метод, подключенный кэто в InterfaceBuilder.; -)

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

...