2011-02-08 3 views
0

私はコアデータを使用しています。要求の結果をループし、ループ内にいくつかのカスタムオブジェクトを作成し、それらをNSMUtableArrayに保存する必要があります。 UIコンポーネント。これは私がやっていることです:NSFetchRequestからNSStringを取得する問題

NSMutableArray *persons = [[NSMutableArray alloc] init]; 

    NSError *error = nil; 
    NSManagedObjectContext *context = [self managedObjectContext]; 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription 
            entityForName:@"Person" inManagedObjectContext:context]; 
    [fetchRequest setEntity:entity]; 
    NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; 
    for (NSManagedObject *info in fetchedObjects) { 

     ToggleButtonInfo *btn = [[ToggleButtonInfo alloc] init]; 

     NSString *personName = [NSString stringWithFormat:@"ww %@", [info valueForKey:@"name"]]; 
     NSLog(@"pn: %@", personName); 
     [btn setButtonInfo:personName]; 

     [persons addObject:btn]; 
    }   
    [fetchRequest release]; 

    return persons; 

ループは正常に動作しています、情報はそこにあります。私はこのような何かを行う場合

[info valueForKey:@"name"] 

は:

[btn setButtonInfo:@"something else here"]; 

すべてが正常に動作し、問題は、私が使用している場合、私は私のコンポーネントで「EXC_BAD_ACCESS」を得ることです。だから、の情報が割り振り解除されており、それがエラーを引き起こしているようですね。 stringWithFormatを使用してスクリプティングを作成しようとしましたが、同じエラーが発生します。

アイデア?

答えて

1

どこでEXC_BAD_ACCESSを取得しますか?後でボタンを表示していると思いますか? -setButtonInfo:はおそらく保持していないか、あなたは別の場所で解放されています。

このコードにはbtnがリークしていることに注意してください。

+0

はい、後でボタンを表示するとエラーが発生します。質問:漏れはなぜですか?それはNSMutableArrayによって所有されていませんか? NSMutable配列が割り当て解除されたときに解放されませんか? – oscarm

+0

あなたは+ allocを呼び出したときからそれを保持しています。 NSMutableArrayには、-addObject:を呼び出した時点からの保持があります。配列の割り当てを解除すると、配列はオブジェクトを解放しますが、あなたの+ allocの保持はそのまま残り、リークします。 –

+0

また、実際にクラッシュする場所からスタックトレースとコードを使用して質問を更新する必要があります。 –

関連する問題