2011-06-24 17 views
0

iPhone SDKのNSArrayにオブジェクトを追加する際に問題があります。問題は、NSDictionaryの最後のオブジェクトのみを追加することです。私は[dict objectForKey:@"ProcessName"]をのNSLogiPhone SDKの配列にオブジェクトを追加する際の問題

NSArray * processes = [[UIDevice currentDevice] runningProcesses]; 
for (NSDictionary * dict in processes){ 
    runningprocesses = [[NSMutableArray alloc] init]; 
    NSString *process = [dict objectForKey:@"ProcessName"]; 
    [runningprocesses addObject:process]; 
} 

が、それは私のすべてのプロセスを示しているが、私はそれらを追加しようとした場合、それは最後のものだけを追加します。これは、コードです。何が起こっているのでしょうか?

NSArray * processes = [[UIDevice currentDevice] runningProcesses]; 
NSMutableArray *runningprocesses = [[NSMutableArray alloc] initWithCapacity:[processes count]]; 
for (NSDictionary * dict in processes){ 
    NSString *process = [dict objectForKey:@"ProcessName"]; 
    [runningprocesses addObject:process]; 
} 

私はそれをしようとすると、これが私の作品:私はあなたの代わりにしようと示唆しているよう

+0

です。コードでは、ループが繰り返されるたびに、runningprocesses配列が新しいインスタンスを指しているからです。 – Mohit

答えて

2

私はあなたのコードを再編集]あなたのコードで

+0

+1:NSArrayの作成にinitWithCapacity:を使用する唯一の答え – redent84

+0

はい、私は "能力ナチ"です...私は変わったデータを本当に信用できない奇妙な行動に頼る唯一の方法です。 –

0

、毎回ループ反復し、runningprocesses配列新しいインスタンスを指しています。 forループの外にあなたの配列のインスタンスを移動し、それを修正するには

NSArray * processes = [[UIDevice currentDevice] runningProcesses]; 
NSMutableArray *runningprocesses = [[NSMutableArray alloc] init]; 
for (NSDictionary * dict in processes){ 

    NSString *process = [dict objectForKey:@"ProcessName"]; 
    [runningprocesses addObject:process]; 
} 
0

あなたが「runningprocesses」アレイのためのループ内のすべての時間を割り当てるしようとしています。そのため、forループの最後には1つのオブジェクトしか存在しません。このコードを置き換えてみてください。

NSArray * processes = [[UIDevice currentDevice] runningProcesses]; 
runningprocesses = [[NSMutableArray alloc] init]; 
for (NSDictionary * dict in processes){ 
    NSString *process = [dict objectForKey:@"ProcessName"]; 
    [runningprocesses addObject:process]; 
} 

これは動作するはずです。

0

alloc-initステートメントをforループの外側に移動する必要があります。次のコードは

関連する問題