Правильный способ сохранить NSArray (сам по себе) в файле plist:
NSArray* anArray = ...;
[anArray writeToFile:@"/path/to/file.plist" atomically:YES];
Однако вы не можете сохранить NSString как массив. Учитывая предоставленный вами XML-список, если вы хотите добавить записи в том же формате, вы можете использовать этот гораздо более простой код:
- (void) writeToFile:(NSString *)string {
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"saved" ofType:@"plist"];
NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];
[dictionary setObject:[NSArray arrayWithObject:@"1234567"] forKey:string];
[dictionary writeToFile:plistPath atomically:YES];
}
Это также позволяет избежать утечки памяти в вашем коде, когда получатель -mutableCopy
сбрасывается со счетом сохранения 1. Это не проблема для GC, но это все еще плохая практика. Вам не нужно чтобы использовать +[NSString stringWithFormat:]
, просто используйте строковый литерал. Если вы хотите использовать другую строку в массиве, вы можете передать ее как дополнительный параметр, получить ее из другого метода и т. Д.
Этот метод все еще хрупок в том смысле, что он хранит только одну строку в массиве, соответствующем данному ключу - также, имя метода было бы лучше, если бы оно более точно указывало, что именно он делает. Кроме того, если для каждого ключа будет когда-либо только одно строковое значение, вы можете подумать о пересмотре plist, чтобы полностью исключить массивы, поскольку он просто жует пространство и усложняет код.