2013-02-20 36 views
3

我有一個奇怪的問題與我的應用程序。我在運行時加載一個名爲「LoginViewController」的NIB。這NIB有一堆網點,以UIView對象放置在NIB像這樣:筆尖UIView在iPad上無,而不是在iPhone上無

enter image description here

在運行時動態我把這些UIView的對象爲在我的表視圖頭。在這種情況下,每個單獨的UIView(右邊的UITableView除外)都被設置爲IBOutlet。每個人都有,當然不同的名稱:現在

@property (strong, nonatomic) IBOutlet UIView *connectionInProgressView; 

,在我的VC的viewDidLoad方法我經歷的這些獨立意見全部四個運行,並確保通過寫日誌它們存在:

NSLog(@"connection in progress view: %@", self.connectionInProgressView); 

我的問題是這樣的:self.connectionInProgressView在iPad上是零而在iPhone上是零。所有其他視圖不論平臺是否爲零並且被實例化。我在iOS 5.0,5.1和6.1的模擬器中運行這個程序。我可以在所有iPad模擬器上重新創建問題。我的應用程序運行良好,並在iPhone上使用微調器加載視圖,但在iPad上無法加載該視圖,因爲它是零!爲什麼!?

我曾嘗試以下:

  • 檢查我的NIB的文件的所有者指向正確的觀點
  • self.connectionInProgressView不指向任何其他IBOutlet中
  • 檢查所有其他子觀點與違規觀點相同。他們是。刪除其所有NIB連接後
  • 刪除self.connectionInProgressView並重新創建它。
  • 卸下從視圖和裝載只是一個帶UILabel內部視圖中的活動的指標。沒有運氣,它不是活動指標。
  • 檢查VC中可能引用self.connectionInProgressView的任何代碼。沒有(除了在viewDidUnLoad的零聲明)。
  • 檢查財產屬性上UINavigationControllerLoginViewController我的AppDelegate屬性類型。
  • 保留的LoginViewController在AppDelegate中的副本,雖然這似乎是浪費,並沒有做出結果的差異。

[編輯2]

問:如何是VC加載

我有一個UINavigationController那是我的AppDelegate的屬性。那UINavigationController是在applicationDidFinishLaunchingWithOptions alloc-init'd我通過我的VC作爲根視圖控制器。我在此處實例化VC。

// Create login/start up views 
LoginViewController *loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil]; 

self.loginViewNavigationController = [[UINavigationController alloc] initWithRootViewController:loginViewController]; 

if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) 
    self.loginViewNavigationController.modalPresentationStyle = UIModalPresentationFormSheet; 

請注意,這是工作在iPhone上,即使我將在後面UINavigationController表現爲模式窗體片在iPad上(不知道這是有利於我的問題)。

一段時間後,在AppDelegate中,當一個不同的委託類拋出一個事件時,我將以模態方式呈現這個UINavigationController。我是這樣做的:

if (self.loginViewNavigationController != nil) { 

    [self.window.rootViewController presentViewController:self.loginViewNavigationController animated:YES completion:nil]; 
} 

我要去瘋狂試圖確定爲什麼這一個特定視圖拖動到我的筆尖和有線起來一樣所有其他是零,在iPad上,而不是零iPhone上。

[編輯1] 當搜索一個重複的問題,我沒能找到這樣的:

A few IBOutlets pointing to nil

我並不孤單!

任何想法?

+0

你對iPhone和iPad有單獨的目標嗎?如果是這樣的話,那麼這個筆尖呢?只有用這個筆尖纔有這個問題(不適用於iPad)?還是跨越所有的筆尖? – 2013-02-20 22:19:49

+0

不,我正在構建一個通用二進制文件。 NIB只針對一個目標。我只對這個特定的NIB有這個問題。 – Aaron 2013-02-20 22:24:11

+0

viewDidUnload永遠不會被調用。擺脫它。 – matt 2013-02-20 22:38:04

回答

5

當您構建通用應用程序時,您確定您沒有爲iPhone和iPad創建單獨的NIB(通常爲LoginViewController.xibLoginViewController~ipad.xib)?

或者你也許認爲你只有一個XIB,但是在某個時候,你有一個專用的XIB for iPad,它被編譯到NIB中,即使你在你的項目中刪除了XIB文件,編譯的專用於iPad的NIB仍然是在構建產品。

在任何情況下,嘗試:

  • 清理項目,甚至更好,你構建產品目錄
  • 要做到後者,你可以刪除你的導出數據文件夾(「管理」窗口 - >「項目」選項卡 - >在左側選擇您的項目 - >點擊「派生數據」旁邊的「刪除」按鈕)
  • 從所有模擬器中刪除您的應用程序,只需確保
  • 構建和運行再次

如果這不起作用,一些想法,以幫助您調試和確定問題是否使用不同的XIB與否關係到iPad:

  • 你可以嘗試像修改您的廈門國際銀行的另一IBOutlet一些測試,例如斷開其他IBOutlet之一,而不是nil與它在XIB中連接的視圖之間的連接,以便當您再次運行應用程序時,此時應記錄爲nil。如果它是iPhone模擬器上的nil(正如你剛剛斷開連接一樣)...但在iPad模擬器上仍然不是nil,那麼它肯定意味着你使用了不同的XIB文件用於iPhone和iPad。
  • 您還可以在XIB中更改您的UIView的正確連接到您的IBOutlet之一的顏色,並查看更改是反映在iPhone和iPad上還是僅反映在iPhone上,因此請檢查此XIB您正在編輯是否與iPad中使用的相同。
+0

阿里 - 我會貫穿你的建議。要回答你的第一個問題,我有一個完全獨立的表格單元格問題,我想我可以通過掛接〜ipad.xib來解決這個問題。我試過了,它沒有工作,然後我刪除了〜ipad.xib。我已經多次清理了這個項目,但都無濟於事。 – Aaron 2013-02-20 22:52:08

+0

你還重置了模擬器嗎? – Rog 2013-02-20 22:57:31

+0

@Rog - 你重置模擬器意味着什麼。我對iOS開發還比較陌生,所以我可能會漏掉一些明顯的東西。 – Aaron 2013-02-20 23:02:56

1

我有一個類似的問題,清理我的項目,刪除派生數據,確保我沒有使用單獨的iPad的iPad;似乎沒有任何工作。原來我的問題非常簡單。我的init-ING我的視圖控制器像這樣:

// In Swift 
let vc = MyViewController() 

,而不是直接使用nibName:

let vc = MyViewController(nibName: "MyViewController", bundle: NSBundle.mainBundle()) 

由於在iPad上進行測試時,我的零出口的錯誤似乎只上來了,我從來沒有認爲要檢查控制器是如何初始化的。

相關問題