2013-10-26 35 views
5

我想更換過時試圖取代過時loadnibnamed:業主

[NSBundle loadNibNamed:@"Subscriptions" owner:self]; 

用這個代替(我唯一能找到的等價物)

[[NSBundle mainBundle] loadNibNamed:@"Subscriptions" owner:self topLevelObjects:nil]; 

,但該對話框彈出,立即消失,而不是像過去一直使用的過程那樣保持開放狀態。

此代碼位於像這樣的視圖控制器中。

- (id)init{ 
    self = [super init]; 
    if (self) { 
     //[NSBundle loadNibNamed:@"Subscriptions" owner:self]; 

     [[NSBundle mainBundle] loadNibNamed:@"Subscriptions" owner:self topLevelObjects:nil]; 
    } 
    return self; 

}

,我從這樣的的appdelegate調用它。

SubscriptionsViewController *subscriptionsViewController = [[SubscriptionsViewController alloc] init]; 
[subscriptionsViewController.window makeKeyAndOrderFront:self]; 

有什麼我失蹤了嗎?這似乎是直截了當的我。

+0

我也有同樣的問題,你有沒有發現任何解決方案 – Retro

回答

1

出現然後消失的對話框是可能收集對象的標誌 - 強烈引用它將收集並丟失的對話框。

棄用的調用保留了筆尖中頂級對象的所有權,新調用不會。

因此,指向頂層對象的所有者對象的屬性必須很強,否則您需要保留頂層對象數組。這與舊的建議相反,即這些屬性較弱。

引用筆尖非頂級對象的屬性仍然很弱。

+0

所以這可能是解決方案,我有出口強勁,但它仍然躲在 – Retro

+0

@Retro - 這聽起來像你有不同的問題,如果您有強烈的參考,則不會收集對象。問你自己的問題,提供你的代碼的細節,出了什麼問題,你嘗試過什麼 - 然後有人可能會幫助你。 – CRD

1

我使用loadNibNamed: owner: topLevelObjects:和總是得到像

錯誤時只有類似的問題

[__NSArrayM insertObject:atIndex:]:對象不能是零」與類型NSException中止()的未捕獲的異常終止稱爲

因爲我的頂級對象在哪裏無。

我終於發現我加載的nib文件的Interface Builder版本設置爲「Xcode 4.6」。當我將它設置爲6.2時,一切正常。

enter image description here