2012-02-08 60 views
2

經過很長一段時間,我終於開始使用Objective-C了,到目前爲止我只有完整的應用程序。目標是最終重構ARC和可能的故事板,但目前我正在拋光iOS 4.x目標。我很生鏽,所以如果這是一個愚蠢的問題,請和我聯繫。幾個IBOutlets指向零

我在我的主視圖中有一個按鈕,觸發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被正確初始化,其餘所有指向nil。

在.M我已經試過這樣:

@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)); 
} 

在iPhone上我得到這樣的:

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}} 

在iPad上,相反,我得到這個:

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}} 

有沒有其他的事情發生,這取決於用戶界面的成語,我對此非常困惑。就好像在iPad上,除了textView之外的任何插口都沒有設置,即使它們在.xib文件中正確鏈接了。在viewWillAppear中,self.textView 也可以在iPad上按預期工作。我也嘗試在viewDidLoad中做這件事,如果我沒有弄錯,應該在viewWillAppear之前調用它,甚至在dismiss:方法中,但它們永遠不可用。

我需要訪問按鈕的框架的原因是關於視圖相對複雜,無法自動重新定位其子視圖。我需要做的唯一事情就是讓按鈕在iPad上更大的模式視圖上更寬。

任何提示將不勝感激!

在此先感謝。

+0

您是否在使用不同的.xib for iPad?還是有可能你認爲你不是,但是你設置混合應用程序項目的方式意味着它爲iPad創建了一個單獨的.xib,而你沒有意識到? – 2012-02-08 22:59:44

+0

不,我只爲另一個MainWindow類創建了不同的iPad .xib,其他所有(包括這個)共享相同的.xib。這個項目最初只是iPhone,所以我手動創建了這個項目,並區分了App Delegate中的工作流程,以根據需要設置根視圖控制器(它是iPad上的分割視圖控制器,iPhone上的導航控制器)。 – Jollino 2012-02-09 00:09:21

+0

您是否試過從產品菜單做一個乾淨的生成?這只是相同的筆尖綁定不同,取決於它是iPad還是iPhone似乎不太可能,所以我懷疑問題在於別處。 – 2012-02-09 00:31:26

回答

2

你有沒有爲iPad和iPhone單獨的.xibs?如果是這樣,你可能會遇到同樣的問題。也就是說,直到@AliSoftware掉在了我的一些知識:

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

基本上你需要:

  1. 刪除構建產品目錄
  2. 從所有的仿真器中刪除您的應用程序
  3. 構建並運行

我相信問題是t帽子一個鬼的.xib爲iPad掛在身邊引發問題。真正擦拭應用程序乾淨的伎倆。祝你好運!

+0

這對我有效,謝謝! – kelin 2015-06-24 15:03:25