2012-03-03 9 views
1

xcode 4.2とARCを使用しています。以下は私が使用しているコードです。私は、いずれかのボタンの上に自分のアプリケーションのクラッシュをクリックして、それがmain.mボタンをクリックするとiOSアプリケーションがクラッシュするiPhone

にこのコードをハイライトするときに時々私はエラーなし

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

、時にはアプリケーションのクラッシュ、このエラーが発生します。

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

私のコードは次のとおりです。私のViewController.mで

私はChooseLoginビューコントローラに取得するには、このコードを使用しています。 ChooseLogin.mで次に

- (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]; 
} 

@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 
+0

存在しないセレクタ(メソッド)にカスタムビューをフックアップしている可能性があるので、UI BuilderサブクラスがInterface Builder nibファイルでどのように定義されているかを調べる必要があります。ビューをタップすると呼び出されるセレクターを記述する必要があります。 –

+0

それを得ることができませんでした...あなたが呼んでいるコントローラーが問題を抱えている可能性がありますか? –

+0

私の質問を編集しました。 –

答えて

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

これは、メッセージがクラスが認識されないクラスに送信されていることを意味します - もしどちらかがこれを書いていませんカスタムセレクタ(関数)、または何らかの理由で関数が間違ったクラスに送信されているため、認識されません。 Xcodeは通常、コードを書くときにこれをキャッチするのにはかなり良いですが、XIBファイルでそれらをチェックしていないようです。

私の経験上、このタイプの問題の最も頻繁な原因は、関数を削除または名前を変更し、そのクラスに関連付けられたXIBファイルを更新することを忘れた場合、または更新する場合です。新しいバージョンの関数、古いものを忘れることなく。

+0

これは基本的にこれです。 nibファイルを変更した後、あるいはクラス定義を変更した後で、他のファイルに変更を加えることを忘れてしまうのは簡単です... –

0
  1. 別のビューコントローラのビューを追加しないでください。
  2. これをやりたいのであれば。コントローラを作成し、それを参照してください。それから、解放されます。なぜなら、参照をどこにも保存しないからです。 ivarをloginScreenに、ARCにコントローラChooseLoginを保存します。
+0

これを実現するには、ビューを追加せずにどうしたらいいですか? –

+0

[モデムコントローラを使用](https://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html)。また、必要に応じて、選択した値を返すプロトコルを作成する必要があります。 –

+0

私は理解できないのですか?なぜ、あるビューコントローラのビューを別のビューにサブビューとして追加しないのですか?または、私はViewController1.view = viewController2.viewを設定すべきではないと言っていますか? – RonLugge

関連する問題