Как записать данные в plist? - PullRequest
7 голосов
/ 02 октября 2011

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

Как записать данные в plist?

Но пока мой список не изменился вообще.

Вот мой код: -

- (IBAction)save:(id)sender
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"drinks" ofType:@"plist"];
    NSString *drinkName = self.name.text;
    NSString *drinkIngredients = self.ingredients.text;
    NSString *drinkDirection = self.directions.text;
    NSArray *values = [[NSArray alloc] initWithObjects:drinkDirection, drinkIngredients, drinkName, nil];
    NSArray *keys = [[NSArray alloc] initWithObjects:DIRECTIONS_KEY, INGREDIENTS_KEY, NAME_KEY, nil];
    NSDictionary *dict = [[NSDictionary alloc] initWithObjects:values forKeys:keys];
    [self.drinkArray addObject:dict];
    NSLog(@"%@", self.drinkArray);
    [self.drinkArray writeToFile:path atomically:YES];
}

Нужно ли выполнять что-то дополнительное?

Я новичок в iPhone SDK, поэтому любая помощь будет принята.

1 Ответ

36 голосов
/ 02 октября 2011

Вы пытаетесь записать файл в комплект вашего приложения, что невозможно. Вместо этого сохраните файл в папку «Документы».

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
path = [path stringByAppendingPathComponent:@"drinks.plist"];

Метод pathForResource может использоваться только для чтения ресурсов, которые вы добавили в свой проект в Xcode.

Вот что вы обычно делаете, когда хотите изменить plist в своем приложении:
1. Скопируйте файл drinks.plist из комплекта вашего приложения в папку «Документы» приложения при первом запуске (используя NSFileManager ).
2. Используйте файл в папке «Документы» только при чтении / записи.

UPDATE

Это способ инициализации свойства drinkArray :

NSString *destPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
destPath = [destPath stringByAppendingPathComponent:@"drinks.plist"];

// If the file doesn't exist in the Documents Folder, copy it.
NSFileManager *fileManager = [NSFileManager defaultManager];

if (![fileManager fileExistsAtPath:destPath]) {
    NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"drinks" ofType:@"plist"];
    [fileManager copyItemAtPath:sourcePath toPath:destPath error:nil];
}

// Load the Property List.
drinkArray = [[NSArray alloc] initWithContentsOfFile:destPath];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...