我有一个TableviewController:
@property (nonatomic,weak) NSSArray *myArray;
然后我将一些对象放在我的数组中的viewdidload
中当我点击一行时,我想访问我的数组:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
但我不能,xcode每次都返回NULL ...
解决方案是什么?
答案 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;
我希望这会对你有所帮助