2011-07-27 16 views
0

別のXIB(SecondView.xib)でUIView(FirstView.m)をロードしましたが、そのXIBのボタンによってアプリケーションがクラッシュします。ボタンのコード(IBOutlet & IBAction)はSecondView.mにあります。XIBでロードされたUIViewボタンが機能しません

SecondView.mのコードをFirstView.mにポイントする必要がありますか?私は#importと@classを使ってみました...しかし、失敗しました。

私が使用しているコードは完全に有効です...私はかなりの問題は、UIViewにロードされているXIBと関係があり、実装ファイルへの接続が失われている可能性があると確信しています。思考?

ありがとうございます!

FirstView.h

#import <UIKit/UIKit.h> 
@interface FirstView : UIViewController { 
    IBOutlet UIView *SecondViewPopUP; 
    IBOutlet UIButton *openBTN; 
    } 

@property (nonatomic, retain) UIView *SecondViewPopUP; 
@property (nonatomic, retain) IBOutlet UIButton *openBTN; 
-(IBAction)showPopUp:(id)sender; 

FirstView.m

@synthesize SecondViewPopUP; 
@synthesize openBTN 

- (void)viewDidLoad { 
    SecondViewPopUP.alpha = 0; 

    // Add IncidentsViewController to view 
    SecondView *SecondV=[[SecondView alloc] init]; 
    SecondV.view.frame = CGRectMake(0, 0, 262, 269); 
    SecondV.view.clipsToBounds = YES; 
    [SecondViewPopUP addSubview:SecondV.view]; 
    SecondViewPopUP.frame = CGRectMake(0, 76, 262, 269); 
    [SecondV release]; 
    } 

-(IBAction)showPopUp:(id)sender { 
    NSLog(@"Stats Button was pressed"); 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.4]; 

    SecondViewPopUP.alpha = 1; 

    [UIView commitAnimations]; 
    } 

SecondView.h

#import <UIKit/UIKit.h> 

@interface ShareViewController : UIViewController { 
    IBOutlet UIButton *share_facebook; 
    IBOutlet UIButton *share_twitter; 
    } 

@property (nonatomic, retain) IBOutlet UIButton *share_facebook; 
@property (nonatomic, retain) IBOutlet UIButton *share_twitter; 

-(IBAction)shareOnFB:(id)sender; 
-(IBAction)shareOnTwitter:(id)sender; 

SecondView.m

@synthesize share_twitter, share_facebook; 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    } 

-(IBAction)shareOnFB:(id)sender { 
    NSLog(@"Shared on FB"); 
    } 

-(IBAction)shareOnTwitter:(id)sender { 
    NSLog(@"Shared on Twitter");  
    } 
+0

いくつかのコードを投稿してください。 – David

+0

追加...そのほとんどは偽造されています...私はすべてのコードをコピーしたくありませんでしたが、その重要なものです。 –

+0

ボタンのアウトレットをロギングしようとすると、それがゼロでないことを確認してください – MCannon

答えて

1

最初にFirstView(おそらくSecondView)はUIViewControllerではなく、UIViewであるので、 "FirstViewController"と命名する方がはるかに明確になります。ビューとビューコントローラは非常に異なるものです。

第2に、 "[SecondViewPopUP addSubview:SecondV.view];行の別のビューのサブビューとしてUIViewControllerのビューを追加しています。これは、UIViewControllerが使用される方法ではなく、正当な理由でUIViewController programming guideが推奨します。

作成する各カスタムビューコントローラオブジェクトは、1つのビュー階層内のすべてのビューを管理します。 iPhoneアプリケーションでは、ビュー階層内のビューは伝統的に画面全体をカバーしますが、iPadアプリケーションでは画面の一部しかカバーできません。ビューコントローラとそのビュー階層内のビューとの1対1の対応は、キーとなる設計上の考慮事項です。複数のカスタムビューコントローラを使用して、同じビュー階層の異なる部分を管理しないでください。同様に、複数の画面分のコンテンツを管理するために、単一のカスタムView Controllerオブジェクトを使用しないでください。あなたのペン先バインディングがあるので、あなたのアプリケーションがクラッシュは、我々は、おそらくあなたがそれらを実装していません「FirstView」のインスタンスに-shareOnFB:または-shareOnTwitter:メッセージを送信しようとしていることがわかりだろうというとき記載されたエラーを投稿した場合最後に

適切に設定されていない、つまり、ファイルの所有者を "SecondView"に設定し、その所有者として "FirstView"のインスタンスをロードします。より多くのデータがなくても確実に言うことはできません。

+0

ありがとうジョナ...あなたはビューコントローラについて正しいです。ここで私の質問です:私は良い使用を維持することをお勧めしますか?ボタンをタップするとポップアップが表示されるようにしたい(画面全体をカバーしない)。それを埋めるための最良の方法は何ですか? –

+0

はまた、クラッシュの後、私のコンソールは、「すべての現在の言語sharedlibrary適用負荷-ルールを:自動;現在、Objective-Cの(GDB)」読み込み...それはまた、スレッド1」でクラッシュ:プログラムは、信号を受信: 『EXC_BAD_ACCESS』。 " –

+0

ビューを所有していないUIViewControllerインスタンスを管理することができます。単にビューを作成し(便利な場合は、UINibでペン先からロードする)、サブビューとして追加します。そのビューに固有のコントローラレベルのロジックを持っている場合は、そのコントローラクラスを作成しますが、そのコントローラはUIViewControllerからではなくNSObjectから継承できます。 UIViewControllerプログラミングガイドのリンクセクションの「注:」を参照してください。 – Jonah

関連する問題