2012-07-04 62 views
0

我收到一個奇怪的錯誤。我們正在使用iOS 5與ARC。當NSZombiesEnabled設置爲true和應用程序插入到調試器,我們得到這個錯誤(這通常發生過,但不是一致)應用程序來自後臺「消息發送到解除分配的實例」

2012-07-04 11:25:17.161 Trivial[624:707] -[vcCurrentGames gamesLoaded:] [Line 284] Found 62 games that are my turn. 
2012-07-04 11:25:17.162 Trivial[624:707] -[vcCurrentGames gamesLoaded:] [Line 285] Found 26 games that are their turn. 
2012-07-04 11:25:17.169 Trivial[624:707] -[vcCurrentGames tableView:heightForHeaderInSection:] [Line 409] Height 1: 29 
2012-07-04 11:25:17.171 Trivial[624:707] *** -[vcDashboard retain]: message sent to deallocated instance 0xf62c3c0 

我們不持有任何地方的儀表板(ARC不允許保留) 。這隻發生在應用程序從後臺加載後。 vcCurrentGames實際上是儀表板上的UITableView。這對我來說更奇怪,因爲如果儀表板被處理,那麼爲什麼它是UITableView加載?

我讀過一點這方面的內容。儀表板在應用程序委託的屬性定義:

@property (nonatomic, strong) vcDashboard *vDashboard; 

我試圖使這一薄弱,這樣它會零出,但也不管用。有人能告訴我爲什麼它被交易,或者爲什麼它試圖在交易後保留vcDashboard?

在應用程序委託我宣佈它是這樣的:

UIViewController *viewController = [[vcDashboard alloc] initWithNibName:@"vcDashboard" bundle:nil]; 
self.vDashboard = (vcDashboard *)viewController; 
+0

你怎麼初始化它?適當的appdelegate方法中的代碼是什麼? – Eimantas

+0

用初始值設定項編輯該問題。 –

回答

1

也許一些初始化過程中出錯。您將vcDashboard分配給UIViewController,然後將該控制器轉換爲適當的類別。雖然理論上這應該沒問題,但我從來沒有見過這種模式。的標準方法是:

self.vDashboard = (vcDashboard*) [[vcDashboard alloc] init]; 

假設筆尖名稱是「vcDashboard」(似乎是這樣),並在筆尖類也是「vcDashboard」。
(順便說一句,習慣上是大寫的類名稱。)

此外,該應用程序進入後臺後,也許vcDashboard被釋放。無論如何,當應用程序從後臺返回時,不能保證它仍然存在。你是否考慮過懶惰的實例化?

// in app delegate 
-(vcDashboard*)vDashboard { 
    if (_vcDashboard) { 
    return _vcDashboard; 
    } 

    vcDasboard vc = [[vcDashboard alloc] init]; 
    // more initialization code 
    _vcDashboard = vc; 
    return vc; 
} 
+0

有趣。我會嘗試的。 –

+0

如果可以的話,我會給你100分。 –

相關問題