0

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 のこのデータは、別のクラス (セルを左から右にスライドさせるために touchbegan と touchmoved を追跡するために作成された UITableViewCell のサブクラス) からログを呼び出すと、突然 (null) になります。

[[ViewController alloc]arrayTest];

これは私に出力を与える

data in test array is(null)

何故ですか?-textFieldShouldBeginEditing を呼び出すと、出力は再び正常になります。配列自体が空になるのはなぜですか (または、単に空だと思っているだけかもしれません)、後でコンテンツを正常に出力するのはなぜですか?

4

3 に答える 3

2

メソッドで配列を割り当てていない可能性がありますinit。配列に対して a を宣言したからといって@property、それが作成されるわけではありません。

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

間違いは単純で、かなりばかげています。Hot Licks が指摘するように:

NSLog(@"arrayTest = %@", [[[ViewController alloc] init] arrayTest]); を実行する場合 ViewController の新しいインスタンスにアクセスするため、以前に ViewController の別のインスタンスで行ったことはすべて表示されません。

データで満たされた配列をまだ持っていないviewControllerの新しいインスタンスを作成していました。配列からのデータは、配列の同じインスタンスにアクセスする場合にのみフェッチできます。

于 2013-11-18T15:31:38.817 に答える