2012-02-08 7 views
2

長い間、私は最終的に私の唯一の完全なアプリでObjective-Cを使って作業を始めました。最終的には、ARCとストーリーボードのリファクタリングを最終的に行うことが目標ですが、当面はiOS 4.xターゲットを磨いています。私はかなり錆びているので、もしこれが愚かな質問であれば私と一緒にバーを作ってください。いくつかのIBOutletsがnilを指している

メインビューにshowActionメソッドをトリガーするボタンがあります。方法は以下の通りです:

- (void)showAbout 
{ 
    AboutViewController *aboutView = [[[AboutViewController alloc] init] autorelease]; 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    { 
     aboutView.modalPresentationStyle = UIModalPresentationFormSheet; 
    } 
    else 
    { 
     aboutView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    } 
    [self presentModalViewController:aboutView animated:YES]; 
} 

AboutViewControllerクラスは、この.Hがあります

@interface AboutViewController : UIViewController <UIActionSheetDelegate, MFMailComposeViewControllerDelegate> { 
} 

- (IBAction)dismiss:(UIButton *)sender; 
- (IBAction)feedback:(UIButton *)sender; 

@property (retain) IBOutlet UIButton *dismissButton; 
@property (retain) IBOutlet UIButton *feedbackButton; 
@property (retain) IBOutlet UIImageView *background; 
@property (retain) IBOutlet UITextView *textView; 

@end 

、すべてが.xibファイル(iPhoneとiPadのために同じもの)に正しく接続されています。アクションは期待通りに起動され、アウトレットにはアクセスできますが、iPhone上でのみ動作します。 iPadで実行しているときは、textViewだけが適切に初期化され、残りのすべてがゼロに設定されます。私はこの取得iPhoneで

@implementation AboutViewController 

@synthesize dismissButton = _dismissButton; 
@synthesize feedbackButton = _feedbackButton; 
@synthesize background = _background; 
@synthesize textView = _textView; 

// ... 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    NSLog(@"obj self.dismiss: %@", self.dismissButton); 
    NSLog(@"frame dismiss: %@", NSStringFromCGRect(self.dismissButton.frame)); 
} 

:私はこれを試してみました.Mで

iPadで

2012-02-08 22:51:00.341 myapp[17290:207] obj self.dismiss: <UIButton: 0x70281d0; frame = (180 410; 120 30); opaque = NO; autoresize = LM+W+RM+TM; layer = <CALayer: 0x7028260>> 
2012-02-08 22:51:00.342 myapp[17290:207] frame dismiss: {{180, 410}, {120, 30}} 

は、代わりに、私はこれを取得:

あり
2012-02-08 22:51:40.428 myapp[17320:207] obj self.dismiss: (null) 
2012-02-08 22:51:40.428 myapp[17320:207] frame dismiss: {{0, 0}, {0, 0}} 

UIイディオムによっては何も起こりません。私は本当にこれについて混乱しています。 iPadの場合、textView以外のアウトレットは.xibファイルに正しくリンクされていても設定されていないようです。 viewWillAppearでは、self.textView で、iPadでも期待どおりに動作します。私はviewWillAppearの前に呼び出されるべきviewDidLoadでもこれをやろうとしました。私が間違っていなければ、さらにはdismiss:メソッドでさえも呼び出されますが、それらは決して利用できません。

ボタンのフレームにアクセスする必要があるのは、aboutビューが比較的複雑で、サブビューの位置を自動的に変更できないためです。私がする必要があるのは、iPad上のより大きなモーダルビューでボタンをもっと広くすることだけです。

ご迷惑をおかけして申し訳ありません。

ありがとうございます。

+0

iPad用に別の.xibを使用していますか?それとも、あなたがそうではないと思う可能性がありますが、ハイブリッドアプリプロジェクトをセットアップする方法は、あなたが実現することなくiPad用の別の.xibを作成したことを意味しますか? –

+0

いいえ、私は他のMainWindowクラス用に異なるiPadの.xibを作成しましたが、他のすべての(これも含めて)同じ.xibを共有します。このプロジェクトはiPhoneだけで始まったので、手動で作成してApp Delegateのワークフローを分けて、必要に応じてルートビューコントローラを設定しました(iPadの分割ビューコントローラ、iPhoneのナビゲーションコントローラ) – Jollino

+0

試しましたか?製品メニューからクリーンビルドを実行しますか?それは、同じペン先がiPadかiPhoneかに応じて異なるバインドをするのは本当らしいことではないので、問題は他の場所にあると思う。 –

答えて

2

iPadとiPhone用に別々の.xibsをお持ちでしたか?もしそうなら、あなたは同じ問題を抱えているかもしれません。

UIView in nib is nil on iPad, and not nil on iPhone

を基本的にあなたがする必要があります:

  1. はすべてあなたのシミュレータ
  2. ビルドからあなたのアプリを削除します
  3. ビルド製品ディレクトリを削除@AliSoftwareは私にいくつかの知識をドロップするまで、つまり実行してください

私は問題がiPad用の幽霊.xibが問題を引き起こしていた。本当にアプリをきれいに拭き取るのはやりました。がんばろう!

+0

これは私のために働いた、ありがとう! – kelin

関連する問題