2016-08-30 4 views
0

にここに私のAPIの応答である - 私はNSDictionaryでこれをロードしているNSDictionaryのNSMutableArrayの

{"kitchen":"3","bath":"5","lanundry":"0","dining":"0","bedroom":"0"} 

と私は次のようにキーを使用して値を取得することができます - 私はNSMutableArraydictionaryオブジェクトを追加したい

NSDictionary *pdata = [NSJSONSerialization JSONObjectWithData: data options:NSJSONReadingMutableContainers error:nil];  
[pdata objectForKey:@"dining"] 

5つのレコードを追加しても、すべての配列値を最後の配列値で上書きします。

itemsA=[[NSMutableArray alloc] init]; 


imgCount *img=[[imgCount alloc] init]; 

if([pdata objectForKey:@"kitchen"]) 
    { 

     [img setCount:[pdata objectForKey:@"kitchen"]]; 
     [img setDesc:@"Kitchen"]; 

     [itemsA addObject:img]; 
    } 
if([pdata objectForKey:@"bath"]) 
    { 
     [img setCount:[pdata objectForKey:@"bath"]]; 
     [img setDesc:@"Bathroom"]; 
     [itemsA addObject:img]; 
    } 
if([pdata objectForKey:@"lanundry"]) 
    { 
     [img setCount:[pdata objectForKey:@"lanundry"]]; 
     [img setDesc:@"Laundry"]; 
     [itemsA addObject:img]; 
     } 
if([pdata objectForKey:@"dining"]) 
     { 
     [img setCount:[pdata objectForKey:@"kitchen"]]; 
     [img setDesc:@"Kitchen"]; 
     [itemsA addObject:img]; 
     } 
    if([pdata objectForKey:@"bedroom"]) 
     { 
     [img setCount:[pdata objectForKey:@"bedroom"]]; 
     [img setDesc:@"Bedroom"]; 
     [itemsA addObject:img]; 
     } 

私のテーブルビューは、最後の値を持つ5行を示して -

Bedroom (0) 

をしかし、私はNSMutable配列にすべての辞書のキーを取得するには、これを試してみてください。この

{"desc":"bathroom","count":"0"}, {"desc":"dining","count":"3"} 
+0

結果の配列はどのように見えますか? – ozgur

+0

新しいオブジェクトをnsmutablearrayに追加しますか? –

+0

私は{"desc": "bathroom"、 "count": "0"}、{"desc": "dining"、 "count": "3"}などとして保存します – Tajuddin

答えて

2

あなたのコードの問題は、あなただけの1 imgオブジェクトを作成し、それを再使用しています。すべてのオブジェクトはObjective-Cの参照によってアクセスされるため、すべてのif条件で個別のimgオブジェクトを作成する必要があります。試してみてください

itemsA=[[NSMutableArray alloc] init]; 

if([pdata objectForKey:@"kitchen"]) 
    { 
     imgCount *img=[[imgCount alloc] init]; 
     [img setCount:[pdata objectForKey:@"kitchen"]]; 
     [img setDesc:@"Kitchen"]; 

     [itemsA addObject:img]; 
    } 
if([pdata objectForKey:@"bath"]) 
    { 
     imgCount *img=[[imgCount alloc] init]; 
     [img setCount:[pdata objectForKey:@"bath"]]; 
     [img setDesc:@"Bathroom"]; 
     [itemsA addObject:img]; 
    } 
if([pdata objectForKey:@"lanundry"]) 
    { 
     imgCount *img=[[imgCount alloc] init]; 
     [img setCount:[pdata objectForKey:@"lanundry"]]; 
     [img setDesc:@"Laundry"]; 
     [itemsA addObject:img]; 
     } 
if([pdata objectForKey:@"dining"]) 
     { 
     imgCount *img=[[imgCount alloc] init]; 
     [img setCount:[pdata objectForKey:@"kitchen"]]; 
     [img setDesc:@"Kitchen"]; 
     [itemsA addObject:img]; 
     } 
    if([pdata objectForKey:@"bedroom"]) 
     { 
     imgCount *img=[[imgCount alloc] init]; 
     [img setCount:[pdata objectForKey:@"bedroom"]]; 
     [img setDesc:@"Bedroom"]; 
     [itemsA addObject:img]; 
     } 
+0

ええ、それです。あなたはチャンピオンです。私はすべてのブロックで初期化しなければならないことを理解していませんでした。どうもありがとうございました。 – Tajuddin

+0

あなたが理解できる答えを与えてくれたように、この回答をアップしました – user3182143

+0

@Tajuddin質問のコメントであなたが辞書の配列を望むようにあなたの応答を置くので、私は辞書を作成しました。 –

0

のようになりたいです。

NSArray*keys=[dict allKeys]; 
NSMutableArray *mutableArray = [keys mutableCopy]; 
+0

これは戻ります - 'code' 2016-08-30 14:57:31.303 ACF [23914:9204243]コピー配列 - ( 浴槽、 家具、 ダイニング、 ベッドルーム、 台所 ) – Tajuddin

7

これは次のように試すことができます。まず、辞書のすべてのキーを取得し、そのキー配列を使用して辞書の配列を作成します。

NSArray*keys=[dict allKeys]; 
NSMutableArray *array = [[NSMutableArray alloc] init]; 
for (NSString *key in keys) { 
    NSDictionary *dic = @{ @"desc":key, @"count": [dict objectForKey:key] }; 
    [array addObject:dic]; 
} 
NSLog(@"Array - %@",array); 

編集:カスタムクラスオブジェクトをしたい場合は、次のように試すことができます。

for (NSString *key in keys) { 
    imgCount *imgObject=[[imgCount alloc] init]; 
    [imgObject setCount:[pdata objectForKey:key]]; 
    [imgObject setDesc:[key capitalizedString]];   
    [array addObject:imgObject]; 
} 
+0

これは、辞書要素にアクセスするための一般的な方法を使用するので、より良い解決策です。でも、私はこの方法を提案しています:) – Arun

+0

ありがとう、この場合は、キーが "バスルーム"を取得してから "バスルーム"のような適切なinitcapワードを表示したいので、このセルのキーを変更する必要があります。 – Tajuddin

+0

@Tajuddin編集した答えに 'capitalizedString'を使ってみましたか? –