2012-02-29 113 views
0

我有一個TableviewController有:@property的NSArray在didSelectRowAtIndexPath方法

@property (nonatomic,weak) NSSArray *myArray; 

然後我把一些物體在我的數組中的viewDidLoad中

當我點擊一排,我想訪問我的數組中:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

但我不能,Xcode中返回NULL每次...

瓦在解決方案?

+0

好問題,但你可以發佈文件,其中你,說,初始化表視圖? – 2012-02-29 19:23:45

+0

在'-tableView:didSelectRowAtIndexPath:'中放置一個斷點。當你點擊它時,輸入'po(NSArray *)[self myArray]',看看你得到了什麼。如果它爲零,則不會正確地爲myArray屬性創建或分配數組。 – Caleb 2012-02-29 19:36:40

+1

爲什麼弱,不強?發佈數組初始化的代碼。 – 2012-02-29 21:08:56

回答

0

是的,這可能與您聲明myArray屬性較弱有關,這意味着setter將不會向其發送retain消息。不過,我也有可能你根本沒有設置它 - 這發生在我身上,因爲如果你確實設置了myArray,並且底層NSArray確實得到釋放,那麼它更有可能是myArray會是一些懸掛,無效的參考而不是nil

你在哪裏設置myArray?請發佈代碼!

+0

我在viewdidload中設置了myArray,當我改變爲強時,一切都很好。謝謝你,你搖滾! – 2012-03-03 10:56:00

1

嗯......這聽起來像你的程序使用automatic reference counting (ARC),其中你的屬性和變量可能是弱或強的引用,並且保留和釋放是自動生成的。

從該文檔:

// The following declaration is a synonym for: @property(retain) MyClass *myObject; 
@property(strong) MyClass *myObject; 

// The following declaration is similar to "@property(assign) MyClass *myObject;" 
// except that if the MyClass instance is deallocated, 
// the property value is set to nil instead of remaining as a dangling pointer. 
@property(weak) MyClass *myObject; 

ARC不產生任何保留了你的變量myArray的,所以當你沒有任何的強引用,它的內存被釋放,並給它的任何引用無效,導致你看到的行爲。嘗試改變你的財產從弱到強參考。弱引用對防止引用週期和類似情況很有用,但對於通常情況下,一個對象「擁有」另一個對象並希望它在擁有對象處於活動狀態時保持活動狀態(例如TableViewController使用的NSArray中的數據) ,您需要一個強大的參考,就像您使用非ARC代碼時想要保留該對象一樣。

0

我有你需要做的這個同樣的問題:

@interface YourTableView:UITableViewController 
{ 
     NSArray *_myArray; 
} 

@property(non atomic,strong) NSArray *myArray; 

目前處於執行;

@synthisize myArray=_myArray; 

我希望這將有助於你

相關問題