2

同様の質問がたくさんありますが、私の場合はうまくいく解決策がありません。


簡単なFlipSideAppを書いてみます。それぞれ1つのボタン(flipBtn | flopBtn)を備えた2つのビューだけで、他のビューを表示できます。その逆も同様です。 flip最初のビューで正常に動作します。flopもう一方のビューでは、が発生し
unrecognized selector sent to instance 0x6c3adf0ます。

[self dismissViewControllerAnimated:YES completion:nil]; ファイルFlipSide.mを呼び出した後、アプリがクラッシュします(以下のコードを参照)。その場合のインスタンスである0x6c3adf0現在のアドレスはどこにありますか。selfFlipSide : UIViewController

dismissViewControllerAnimated:completionしたがって、エラーメッセージに記載されている認識されないセレクターは-methodだと思います。
XcodeのCodeSenseを入力している間、そのメソッドを「推奨」します。

UIViewControllerクラスリファレンスによると、このメソッドはiOS5.0SDKで知られています。
私の展開ターゲットは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__);
}




ConsoleOutPutは次のとおりです。

-[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 
4

1 に答える 1

3

私は自分で解決策を手に入れました!

エラーメッセージがそれを知っていることは理にかなっています:
答えは使用されたXIBファイルにあります。

経験則:クリックまたは「ctrl」+クリック
して、InterfaceBuilderのGUI要素を確認し、送信されたすべてのイベントが既存のメソッドに接続されていることを確認します。

そうでない場合
instanceは、GUI要素がInterfaceBuilderでそれに接続されている存在しないメソッドを取得sentすることを意味します。
unrecognized selector;-)

1つのイベントを複数のメソッドに接続できることに注意してください。それらの1つでも(もう)定義されていない場合は、そのエラーが発生します。メソッドのシグニチャを手動で削除、名前変更、または変更する場合は、このことに注意してください。以前に作成された接続がまだ存在している可能性があります。

于 2011-12-12T19:21:17.230 に答える