0
data = [[NSMutableArray arrayWithCapacity:numISF]init];
count = 0;
while (count <= numISF)
{   
    [data addObject:[[rouge_col_data alloc]init]];
    count++;
}

whileループをステップスルーすると、データ配列内の各オブジェクトは「スコープ外」になります

rougecoldataの実装は次のようになります。

@implementation rouge_col_data
@synthesize pos;
@synthesize state;
-(id) init {
    self = [super init];    
    return self;
}
@end

私が見つけたほとんどのチュートリアルでは、これらの種類の配列のオブジェクトにのみNSStringを使用しています。

-ありがとうAlexE

編集

data = [[[NSMutableArray alloc] initWithCapacity:numISF]retain];
//data = [[NSMutableArray arrayWithCapacity:numISF] retain];
count = 0;
while (count < numISF)
{

    [data addObject:[[[rouge_col_data alloc]init]autorelease]];

    count++;

}

'data ='を切り替えても、同じエラーが発生します。

4

2 に答える 2

3
  1. init通話の結果を呼び出す必要はありませんarrayWithCapacity:arrayWithCapacity:すでに初期化された(ただし自動解放された)オブジェクトを返します。または、を呼び出すこともできます[[NSMutableArray alloc] initWithCapacity:]
  2. ループに1つのエラーがあります。ゼロから始めているので、オブジェクトを追加します。この余分なオブジェクトを追加すると成功します-それはあなたがやろうとしていることのようには見えません。
  3. おそらくautorelease、配列に追加するオブジェクトが必要になるでしょう。配列はそれ自体でそれらを保持します。オブジェクト自体を保持する必要がある場合は問題ありませんが、配列に保持を任せるのはかなり一般的です。
  4. 配列自体が必要ですretain。そうしないと、イベントループの最後に配列が消えてしまいます。
于 2009-11-10T17:38:46.200 に答える
2

私があなたのコードで見つけることができる唯一のエラーはあなたのNSArray初期化です。

どこで行うか:

data = [[NSMutableArray arrayWithCapacity:numISF] init];

あなたがしているべきです:

data = [NSMutableArray arrayWithCapacity:numISF];

これは、arrayWithCapacityがファクトリメソッドであり、自動解放されたインスタンスを返すためです。このメソッドの後でオブジェクトを使い続けたい場合は、retainそれを行う必要があり、次のようになります。

data = [[NSMutableArray arrayWithCapacity:numISF] retain];
于 2009-11-10T17:38:16.710 に答える