Приложение iOS вылетает при нажатии кнопки iPhone - PullRequest
1 голос
/ 04 марта 2012

Я использую xcode 4.2 и ARC.Ниже приведен код, который я использую.Когда я нажимаю на любую кнопку, мое приложение вылетает, и оно подсвечивает этот код в main.m

Иногда я получаю эту ошибку

-[__NSCFTimer parentLogin:]: unrecognized selector sent to instance

, а иногда приложение вылетает без ошибок.

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

Мой код:

В моем ViewController.m я использую этот код для доступа к контроллеру представления ChooseLogin.

- (IBAction)action:(id)sender {


    ChooseLogin *loginScreen = [[ChooseLogin alloc] initWithNibName:@"ChooseLogin" bundle:nil];
    [UIView beginAnimations:@"flipview" context:nil];
    [UIView setAnimationDuration:2];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:NO];
    [self.view addSubview:loginScreen.view];
    [UIView commitAnimations];
}

Затем в ChooseLogin.m:

@implementation ChooseLogin


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
    [super viewDidLoad];
}


- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (IBAction)parentLogin:(id)sender {

    NSLog(@":::::::");

    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

    NSString *passwd = [prefs stringForKey:@"password"];

    NSLog(@"data saved");

    if (passwd == nil) {


    CreatePassword *cPassword = [[CreatePassword alloc] initWithNibName:@"CreatePassword" bundle:nil ];
        [UIView beginAnimations:@"flipview" context:nil];
        [UIView setAnimationDuration:1];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:NO];
        [self.view addSubview:cPassword.view];
        [UIView commitAnimations];

    }else {

        UserPassword *uPasswd = [[UserPassword alloc] initWithNibName:@"UserPassword" bundle:nil];
        [UIView beginAnimations:@"flipview" context:nil];
        [UIView setAnimationDuration:1];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:NO];
        [self.view addSubview:uPasswd.view];
        [UIView commitAnimations];

    }
}

- (IBAction)childLogin:(id)sender {

    ChildLogin *loginScreen = [[ChildLogin alloc] initWithNibName:@"ChildLogin" bundle:nil];
    [UIView beginAnimations:@"flipview" context:nil];
   // [UIView setAnimationDuration:1];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:NO];
    [self.view addSubview:loginScreen.view];
    [UIView commitAnimations];
}

@end

Ответы [ 2 ]

1 голос
/ 04 марта 2012
-[__NSCFTimer parentLogin:]: unrecognized selector sent to instance

Это означает, что сообщение отправляется в класс, который класс не может распознать - вы либо не написали этот пользовательский селектор (функцию), либо каким-то образом функция отправляется в неправильный класси, следовательно, не признается.XCode обычно очень хорошо ловит их при попытке написать код, но, похоже, не проверяет их в файлах XIB.

Наиболее частая причина такого типа проблем, по моему опыту, - это когдаВы удаляете или переименовываете функцию и забываете обновить файл XIB, связанный с этим классом, или обновляете его, и он добавляет новую версию функции, не забывая старую.

0 голосов
/ 04 марта 2012
  1. Вы не должны добавлять представление одного контроллера представления к другому.
  2. Если вы все еще хотите это сделать. Вы создаете контроллер, берете его вид и затем освобождаетесь, потому что нигде не храните ссылку на него. сделайте ivar loginScreen и ARC сохранит для вас контроллер ChooseLogin.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...