Сохранение новых входных строк на iPhone NSMutableArray - PullRequest
2 голосов
/ 11 марта 2012

Я использую код ниже, чтобы добавить строки к NSMutableArray. Но проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я добавляю новое значение к NSMutableArray, предыдущее значение удаляется, и появляется новое значение, поэтому всегда есть одно значение.

Я должен сохранить это NSMutableArray в NSUserDefaults, чтобы использовать его и на других экранах.

Я много искал, пожалуйста, помогите мне

код:

- (IBAction)addChildren:(id)sender {
    inputChildName = nameOfChild.text;
    childArray = [[NSMutableArray alloc] init];
    [self.childArray addObject:inputChildName];
    NSUserDefaults *childrenNamesForLabel = [NSUserDefaults standardUserDefaults];
    [childrenNamesForLabel setObject:childArray forKey:@"children"];
    [childrenNamesForLabel synchronize];
    NSLog(@"CHILDREN ARRAY::: %@", childArray);
}

Ответы [ 4 ]

5 голосов
/ 11 марта 2012

Поскольку всякий раз, когда вы получаете действие addChildren, вы воссоздаете childArray, что означает, что он будет содержать 0 объектов, тогда вы добавляете один объект.

childArray = [[NSMutableArray alloc] init];
[self.childArray addObject:inputChildName];

Переместите childArray = [[NSMutableArray alloc] init]; в метод init или load, и он должен работать.

1 голос
/ 11 марта 2012

Каждый раз, когда вы делаете это:

childArray = [[NSMutableArray alloc] init];

вы создаете новый NSMutableArray. Вы должны поставить эту строку, например в -viewDidLoad, чтобы этот код работал.

0 голосов
/ 11 марта 2012
childArray = [[NSMutableArray alloc] init];

Вы инициализируете новый объект массива каждый раз, когда сохраняете новую строку .. ..

таким образом вы добавляете одну строку в массив .. и сохраняете новый массив вместо предыдущего ..

Чтобы решить эту проблему ... добавьте childArray как member variable в ваш файл class.h ..

и в вашем viewDidLoad сделайте это

childArray = [[NSMutableArray alloc] init];

затем измените свой код ниже

-(IBAction)addChildren:(id)sender{
inputChildName = nameOfChild.text;


[self.childArray addObject:inputChildName];

NSUserDefaults *childrenNamesForLabel = [NSUserDefaults standardUserDefaults];

[childrenNamesForLabel setObject:childArray forKey:@"children"];

[childrenNamesForLabel synchronize];

 NSLog(@"CHILDREN ARRAY::: %@", childArray);

}
0 голосов
/ 11 марта 2012

inputChildArray и childarray являются переменными-членами вашего класса?тогда вы должны инициализировать массив в методе init или в чем-то подобном.поэтому просто переместите строку

// initialise array
childArray = [[NSMutableArray alloc] init];

в метод init.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...