如果从外面调用NSMutableArray是空的?

时间:2013-09-13 15:40:09

标签: ios objective-c arrays nsmutablearray

我有一个从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输出再次正常。为什么数组会自行清空(或者我只是想它会这样做)然后再将内容再次输出?

4 个答案:

答案 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实例,它还没有任何数组填充数据。只有在访问相同的数组实例时,才能获取数组中的数据。