2016-12-21 6 views
0

У меня есть один NSMutableDictionary:Добавить NSMutableDictionary в массив для кнопки действий

sampleDict = [NSMutableDictionary new]; 

[sampleDict setObject:@"FooIndex" forKey:@"Key_1"]; // adds @"Foo" 
[sampleDict setObject:@"FooOne" forKey:@"Key_2"]; // adds @"Foo" 
[sampleDict setObject:@"FooTwo" forKey:@"Key_3"]; // adds @"Foo" 
[sampleDict setObject:@"FoFour" forKey:@"Key_4"]; // adds @"Foo" 
[sampleDict setObject:@"FooFivve" forKey:@"Key_5"]; // adds @"Foo" 

Я хочу, чтобы добавить этот словарь в массив на кнопки действия здесь код, как это,

arraytesting = [NSMutableArray new]; 

- (IBAction)action:(id)sender { 
    [arraytesting addObject:sampleDict]; 
    NSLog(@"Sample arraytesting>>>>> %@",arraytesting); 

} 

Наконец выход:

(
     { 
     "Key_1" = FooIndex; 
     "Key_2" = FooOne; 
     "Key_3" = FooTwo; 
     "Key_4" = FoFour; 
     "Key_5" = FooFivve; 
    } 
) 

Но когда мне нужно обновить словарь:

[sampleDict setObject:@"one" forKey:@"Key_1"]; // adds @"Foo" 
[sampleDict setObject:@"two" forKey:@"Key_2"]; // adds @"Foo" 
[sampleDict setObject:@"three" forKey:@"Key_3"]; // adds @"Foo" 
[sampleDict setObject:@"FoFour" forKey:@"Key_4"]; // adds @"Foo" 
[sampleDict setObject:@"FooFivve" forKey:@"Key_5"]; // adds @"Foo" 

Выход выглядит следующим образом:

(
    { 
     "Key_1" = FooIndex; 
     "Key_2" = FooOne; 
     "Key_3" = FooTwo; 
     "Key_4" = FoFour; 
     "Key_5" = FooFivve; 
    }, 
    { 
     "Key_1" = FooIndex; 
     "Key_2" = FooOne; 
     "Key_3" = FooTwo; 
     "Key_4" = FoFour; 
     "Key_5" = FooFivve; 
    } 
) 

И я хочу выход быть похожим:

(
    { 
     "Key_1" = FooIndex; 
     "Key_2" = FooOne; 
     "Key_3" = FooTwo; 
     "Key_4" = FoFour; 
     "Key_5" = FooFivve; 
    }, 
    { 
     "Key_1" = one; 
     "Key_2" = two; 
     "Key_3" = three; 
     "Key_4" = FoFour; 
     "Key_5" = FooFivve; 
    } 
) 

ответ

0
[sampleDict setObject:@"one" forKey:@"Key_1"]; // adds @"Foo" 
[sampleDict setObject:@"two" forKey:@"Key_2"]; // adds @"Foo" 
[sampleDict setObject:@"three" forKey:@"Key_3"]; // adds @"Foo" 
[sampleDict setObject:@"FoFour" forKey:@"Key_4"]; // adds @"Foo" 
[sampleDict setObject:@"FooFivve" forKey:@"Key_5"]; // adds @"Foo" 

Здесь вы используете ту же ссылку на то же sampleDict. Вместо этого снова создайте новый объект и добавьте его.

smapleDict = [NSMutableArray new]

[sampleDict setObject:@"one" forKey:@"Key_1"]; // adds @"Foo" 
    [sampleDict setObject:@"two" forKey:@"Key_2"]; // adds @"Foo" 
    [sampleDict setObject:@"three" forKey:@"Key_3"]; // adds @"Foo" 
    [sampleDict setObject:@"FoFour" forKey:@"Key_4"]; // adds @"Foo" 
    [sampleDict setObject:@"FooFivve" forKey:@"Key_5"]; // adds @"Foo" 
+0

я не понимаю @sivajee – Teja

+0

вы делаете изменения в одном словаре. Итак, вы получаете одинаковые элементы –

+0

здесь я хочу использовать только один словарь, не нужно создавать еще один – Teja

1

Чтобы массив добавить ссылку на объект. После этого вы редактируете словарь и добавляете его снова. Вы можете позвонить copy, чтобы создать новый экземпляр sampleDict. Вы метод должен быть такой:

- (IBAction)action:(id)sender { [arraytesting addObject:[sampleDict copy]]; NSLog(@"Sample arraytesting>>>>> %@",arraytesting); } 
+0

Спасибо за ваш ответ @PRECover, но с той же проблемой столкнулся – Teja

0

Вашего словарем sampleDict является ссылкой, так что вам нужно изменяемая копией этого, если вы этого не сделаете, и вы измените исходный словарь, это изменит всю вашу dicts на вашем массив, так что вам нужно копировать, изменять и добавлять затем к массиву, что-то вроде этого

#import "ViewController.h" 

@interface ViewController() 
@property NSMutableArray * arrayTesting; 
@property NSMutableDictionary * sampleDict; 
@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    self.sampleDict = [NSMutableDictionary new]; 


    [self.sampleDict setObject:@"FooIndex" forKey:@"Key_1"]; // adds @"Foo" 
    [self.sampleDict setObject:@"FooOne" forKey:@"Key_2"]; // adds @"Foo" 
    [self.sampleDict setObject:@"FooTwo" forKey:@"Key_3"]; // adds @"Foo" 
    [self.sampleDict setObject:@"FoFour" forKey:@"Key_4"]; // adds @"Foo" 
    [self.sampleDict setObject:@"FooFivve" forKey:@"Key_5"]; // adds @"Foo" 

    self.arrayTesting = [NSMutableArray new]; 

    [self.arrayTesting addObject:self.sampleDict]; 
    NSLog(@"Sample arraytesting>>>>> %@",self.arrayTesting); 
} 

- (IBAction)buttonAction:(id)sender { 



    NSMutableDictionary * toModify = [self.sampleDict mutableCopy]; 

    [toModify setObject:@"One" forKey:@"Key_1"]; // adds @"Foo" 
    [toModify setObject:@"Two" forKey:@"Key_2"]; // adds @"Foo" 
    [toModify setObject:@"Three" forKey:@"Key_3"]; // adds @"Foo" 
    [toModify setObject:@"FoFour" forKey:@"Key_4"]; // adds @"Foo" 
    [toModify setObject:@"FooFivve" forKey:@"Key_5"]; // adds @"Foo" 

    [self.arrayTesting addObject:toModify]; 
    NSLog(@"Sample arraytesting>>>>> %@",self.arrayTesting); 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 


@end 

Я надеюсь, что это поможет вам

+0

Спасибо @ reinier, это только одно обновление времени, но здесь я хочу обновить новые значения в словаре каждая кнопка действие – Teja

+0

То же самое, измените значения в новой изменяемой копии вашего словаря, а затем добавьте в свой массив –

+0

я сделал то же самое, но не обновил @Reinier – Teja