2015-12-08 115 views
0

我想把1個字典的不同實例放入一個數組中。分享預期和當前的產出。請建議一些 預先感謝NSArray內的NSDictionary

Program.h

@property (nonatomic,strong)NSMutableArray* array; 

Program.m

-- (void)StartFuntion 
{ 
_array = [[NSMutableArray alloc] init]; 
NSMutableDictionary* dicOne = [[NSMutableDictionary alloc] init]; 

[dicOne setObject:@"A" forKey:@"1"];  //Adding new 
[dicOne setObject:@"B" forKey:@"2"]; 
[dicOne setObject:@"C" forKey:@"3"]; 
[dicOne setObject:@"D" forKey:@"4"]; 
[self addob:dicOne];      //sending dicOne to funtion 

[dicOne removeAllObjects];    //Remove objects 

[dicOne setObject:@"X" forKey:@"100"];  //Again Adding new objects 
[dicOne setObject:@"Y" forKey:@"200"]; 
[dicOne setObject:@"Z" forKey:@"300"]; 
[dicOne setObject:@"W" forKey:@"400"]; 
[self addob:dicOne]; 
} 


-- (void) addob:(NSMutableDictionary*)dic{ 

[_array addObject:dic]; 
NSLog(@"_array = %@",_array); 

} 

電流輸出:

_array = (
     { 
    100 = X; 
    200 = Y; 
    300 = Z; 
    400 = W; 
}, 
    { 
    100 = X; 
    200 = Y; 
    300 = Z; 
    400 = W; 
} 
    ) 

預期輸出:

_array = (
    { 
    1 = A; 
    2 = B; 
    3 = C; 
    4 = D; 
}, 
    { 
    100 = X; 
    200 = Y; 
    300 = Z; 
    400 = W; 
    } 
    ) 

回答

3

你不能重複使用dicOne。而不是刪除它的對象,創建一個新的實例。

_array = [[NSMutableArray alloc] init]; 
NSMutableDictionary* dicOne = [[NSMutableDictionary alloc] init]; 

[dicOne setObject:@"A" forKey:@"1"];  //Adding new 
[dicOne setObject:@"B" forKey:@"2"]; 
[dicOne setObject:@"C" forKey:@"3"]; 
[dicOne setObject:@"D" forKey:@"4"]; 
[self addob:dicOne];      //sending dicOne to funtion 

dicOne = [[NSMutableDictionary alloc] init]; 

[dicOne setObject:@"X" forKey:@"100"];  //Again Adding new objects 
[dicOne setObject:@"Y" forKey:@"200"]; 
[dicOne setObject:@"Z" forKey:@"300"]; 
[dicOne setObject:@"W" forKey:@"400"]; 
[self addob:dicOne]; 
+0

感謝伴侶! 其工作 –

1

您重用NSMutableDictionary而不是創建一個新的實例。做這樣的事情,而不是...

[_array addObject:@{ 
        @"1" : @"A", 
        @"2" : @"B", 
        @"3" : @"C", 
        @"4" : @"D", 
        }]; 

[_array addObject:@{ 
        @"100" : @"X", 
        @"200" : @"Y", 
        @"300" : @"Z", 
        @"400" : @"W", 
        }]; 
+0

僅供參考 - 與OP代碼相比,您擁有向後的鍵和值。 – rmaddy

+0

剛剛意識到這一點。有沒有人喜歡'[setValue:forKey:]' – Avi

+0

是的因爲'[setObject:forKey:]'更好。 – trojanfoe

0

你可以做這樣的事情:

NSMutableArray array = [[NSMutableArray alloc] init]; 
[array addObject:dict1]; 
[array addObject:dict2]; 
0

當然可以,但你必須在_array插入之前使DIC的副本。

-- (void) addob:(NSMutableDictionary*)dic{ 
[_array addObject:[dic copy]]; 
NSLog(@"_array = %@",_array); 
} 

或者如果你想在你的數組中使用可變字典,請使用[dic mutableCopy]。 您也可以在調用addob時創建副本:而不是在方法中。