在didSelectRowAtIndexPath中@property NSArray

时间:2012-02-29 18:57:46

标签: ios properties nsarray

我有一个TableviewController:

@property (nonatomic,weak) NSSArray *myArray;

然后我将一些对象放在我的数组中的viewdidload

当我点击一行时,我想访问我的数组:

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

但我不能,xcode每次都返回NULL ...

解决方案是什么?

3 个答案:

答案 0 :(得分: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代码,就像想要保留对象一样,你想要一个强引用。

答案 1 :(得分:0)

是的,它可能与您已将myArray属性声明为弱的事实有关,这意味着setter不会向其发送retain消息。但是,我也有可能你根本没有设置它 - 这种情况发生在我身上,因为如果你确实设置了myArray,而底层的NSArray确实被释放了,那么它就是myArray更有可能是一些悬空,无效的参考,而不是nil

您在哪里设置myArray?请发布代码!

答案 2 :(得分:0)

我遇到了同样的问题:

@interface YourTableView:UITableViewController
 {
         NSArray *_myArray;
 }

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

现在正在实施;

@synthisize myArray=_myArray;

我希望这会对你有所帮助