1

以下のような NSArray 型の配列があります。

@property (nonatomic, strong) NSArray *myArray;

この配列のセッターで、配列カウントが0かどうかをチェックしてnilを返し、そうでなければ配列をそのまま返すようにしたい。私は以下のようにしています:

- (NSArray *)myArray
{
    return ([self.myArray count] == 0) ? nil : self.myArray;
}

NSArray に対して nil を返してもビルド エラーは発生しませんが、不正なアクセス コードの実行時エラーが発生します。私はここでどんな間違いを犯していますか?

4

2 に答える 2

1

あなたのゲッターメソッドは再帰的に自分自身を呼び出しています。

self.myArray

コンパイラによって変換されます

[self myArray]

これにより、最終的にスタック オーバーフロー (!) が発生します。

プロパティのセッターまたはゲッター メソッド内では、代わりに関連するインスタンス変数にアクセスする必要があります。

- (NSArray *)myArray
{
    return ([_myArray count] == 0) ? nil : _myArray;
}
于 2013-10-18T19:05:55.017 に答える
0

このメソッドを呼び出す前に、配列を別の場所でインスタンス化しますか? アクセスする前に存在する必要があります。

_myArray = [NSArray arrayWithObjects:@"one",@"two",nil];

または、配列を作成する他の多くの手法の 1 つです。

于 2013-10-18T19:06:26.490 に答える