2012-03-13 63 views
-1

我認爲這不是一個常見問題,這使得它更難回答。任何幫助,雖然讚賞。我的uitableview.delegate被設置爲null。任何想法爲什麼,或者我怎麼能弄清楚爲什麼?

我需要在我的應用程序中多次調用此委託,並且我注意到多次後,委託開始返回爲NULL(並因此停止響應)。我把一個NSLog的無處不在的委託被調用,所以我知道,在這一點上,它的罰款:

UIImage *image = [self.delegate largeThumnailForMediaAtIndex:indexPath.row]; 

那麼下一次這條線被調用時,委託被設置爲NULL。它周圍沒有線路調用或設置代表。我也在setDelegate方法上放了一個NSLog,並且在它變爲NULL之前沒有被調用。

您可能需要查看的任何代碼,請告訴我。任何想讓我嘗試的想法,請讓我知道。

感謝您的幫助。

編輯:奇怪,但可能有助於導致解決方案。我把一個NSTimer scheduledTimer放在了代理的類中,並且每秒鐘觸發一次,這樣我就可以看到它是否在任何時候都是空的。然而,我得到的結果是,這一次它沒有變爲空。它返回了所有的委託方法。當我將計時器取出時,它返回到返回NULL。顯然有一個計時器是一個奇怪的解決方法'解決方案'。我希望這能爲某人敲響警鐘,並讓他們知道問題可能出在哪裏?

編輯2:我已經解決了這個問題,而不是我的AppDelegate使用此代碼:

JCreateViewController *create = [[JCreateViewController alloc] init]; 
    [create.navigationBar addLeftButtonWithTitle:@"Back" type:JButtonTypeArrow]; 
    create.navigationBar.title = @"Entry #17"; 
    [self.window addSubview:create.view]; 

聲明它在我的頭文件,然後使用此:

self.create = [[JCreateViewController alloc] init]; 
    [self.create.navigationBar addLeftButtonWithTitle:@"Back" type:JButtonTypeArrow]; 
    self.create.navigationBar.title = @"Entry #17"; 
    [self.window addSubview:self.create.view]; 

我不明白爲什麼這會產生變化。我很想知道,如果有人知道?

+0

你如何「設置」代表? – Ali 2012-03-13 00:26:41

+0

'self.tableView。delegate = self;' – Andrew 2012-03-13 00:29:02

+1

如果你已經實現了'-setDelegate:'並且沒有被調用,那麼你使用ARC並且你的'delegate'聲明爲'weak'?如果是這樣,當實際的對象被釋放時它將自動成爲'nil'。 – 2012-03-13 00:29:05

回答

3

看起來像你正在使用ARC。無論這個對象是什麼,都沒有它擁有它。沒有什麼強有力的參考,所以它被釋放,然後在某個時候它被釋放。

JCreateViewController *create = [[JCreateViewController alloc] init]; 

這是一個局部變量。當方法結束時變量超出範圍時,將無法再訪問該對象。根據MRR,這將是一個泄漏。在ARC下,對象將會死亡,就像在autorelease池中一樣。

self.create = [[JCreateViewController alloc] init]; 

通過創建一個屬性(大概strong),並把控制成財產,你給什麼self是所屬參照控制器。只要該物業未被重新分配或設置爲nil,它就會生活。因爲定時器保留了它的目標(我相信它是控制器(你的問題很不清楚)),並且定時器本身由運行循環保留。所以運行循環保持重複定時器的活動,定時器保持你的控制器活着。

總之,確保東西擁有這個對象,它會堅持下去。

+0

這就是它!!!!! – hfossli 2013-08-13 17:36:44

相關問題