我有一个从sqlite表中读取的应用程序,并将数据保存在UIViewController的主ViewController类子类中声明的NSMutableArray中,此方法在viewDidLoad中调用。此NSMutable数组声明如下:
@property (strong, nonatomic) NSMutableArray *dataForTable;
此数据显示在一个表中,该表在应用启动时正常加载。现在我声明一个方法来记录这个NSMutableArray的内容
-(void) arrayTest {
NSLog(@" data in test array is%@",dataForTable);}
当我在这个类中的任何地方调用它时输出也很好,比如在
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
[self arrayTest]; . . . . . . }
但是这个NSMutableArray中的数据突然变成(null)当我从另一个类调用日志时(创建UITableViewCell的子类来跟踪touchbegan和touchmoved从左到右滑动单元格)
[[ViewController alloc]arrayTest];
这给了我输出
data in test array is(null)
为什么?现在,如果我调用-textFieldShouldBeginEditing输出再次正常。为什么数组会自行清空(或者我只是想它会这样做)然后再将内容再次输出?
答案 0 :(得分:2)
您可能没有在init
方法中分配数组。仅仅因为您为数组声明了@property
,并不意味着它是为您创建的:
- (id)init {
self = [super init];
if (self) {
self.arrayTest = [NSMutableArray array];
}
return self;
}
答案 1 :(得分:1)
我看到的唯一问题是你要从课外测试的代码行:
[[ViewController alloc]arrayTest];
此行为ViewController
的新实例分配空间,但实际上并未初始化实例变量。
尝试:
[[[ViewController alloc] init] arrayTest];
答案 2 :(得分:0)
首先需要初始化实例。尝试使用[[[ViewController alloc] init]或[ViewController new],然后调用方法arrayTest。
答案 3 :(得分:0)
错误很简单,非常愚蠢。正如Hot Licks所指出的那样:
如果你做NSLog(@“arrayTest =%@”,[[[ViewController alloc] init] arrayTest]);你将访问一个新的ViewController实例,所以你以前在ViewController的另一个实例中所做的任何事都不会被看到。
我正在创建一个新的viewController实例,它还没有任何数组填充数据。只有在访问相同的数组实例时,才能获取数组中的数据。