0

我有一个从 sqlite 表中读取数据并将数据保存在 NSMutableArray 中的应用程序,该 NSMutableArray 在 UIViewController 的主 ViewController 类子类中声明,此方法在 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 输出又可以了。为什么数组自己清空(或者我只是认为它会清空)然后稍后再次输出内容?

4

3 回答 3

2

您可能没有在init方法中分配数组。仅仅因为您@property为数组声明了 a ,并不意味着它是为您创建的:

- (id)init {
    self = [super init];
    if (self) {
        self.arrayTest = [NSMutableArray array];
    }
    return self;
}
于 2013-09-13T15:41:57.383 回答
1

我看到的唯一问题是您要从课堂外测试的代码行: [[ViewController alloc]arrayTest];

此行为 的新实例分配空间,ViewController但实际上并未初始化实例变量。

尝试: [[[ViewController alloc] init] arrayTest];

于 2013-09-13T15:58:18.887 回答
0

这个错误很简单,是的,很愚蠢。正如 Hot Licks 指出的那样:

如果你这样做 NSLog(@"arrayTest = %@", [[[ViewController alloc] init] arrayTest]); 您将访问一个新的 ViewController 实例,因此您之前在另一个 ViewController 实例中所做的任何事情都不会被看到。

我正在创建一个新的 viewController 实例,它还没有任何填充数据的数组。只有在访问相同的数组实例时,才能从数组中获取数据。

于 2013-11-18T15:31:38.817 回答