не может сохранить plist. путь недоступен для записи

Я сохраняю много информации в plist. Это один из стандартных в моем mainBundle.

это мой метод для загрузки пути и данных из plist. если файл в папке «поддержка приложений» не существует, я копирую его из mainBundle туда.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; self.plistPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",plistName]]; NSFileManager *fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath: self.plistPath]) { NSString *pathInBundle = [[NSBundle mainBundle] pathForResource:plistName ofType:@"plist"]; self.plist = [NSMutableDictionary dictionaryWithContentsOfFile:pathInBundle]; NSLog(@"plist doesnt exist"); } else { self.plist = [NSMutableDictionary dictionaryWithContentsOfFile:self.plistPath]; NSLog(@"plist exist"); } NSLog(@"plist path: %@",self.plistPath); 

если я добавлю следующие строки в конце, нет NO ответа:

 if([fileManager isWritableFileAtPath:self.plistPath]) NSLog(@"YES"); else NSLog(@"NO"); 

в конце концов, я попытался сохранить с помощью [self.plist writeToFile:self.plistPath atomically:YES]; , который также не работает.


извините за ответ так поздно – у меня было много другого дела. Вернуться к моей проблеме: я получаю ошибку только при попытке добавить новую запись в мой словарь (plist). редактирование не проблема. Я думаю, проблема в том, как я пытаюсь добавить запись. мой код выглядит так:

 NSMutableDictionary *updateDict = [[self.plist objectForKey:@"comments"]mutableCopy]; NSMutableDictionary *tmpDict = [[[NSMutableDictionary alloc]init]autorelease]; [tmpDict setObject:comment forKey:@"comment"]; [tmpDict setObject:author forKey:@"author"]; [tmpDict setObject:car forKey:@"car"]; [tmpDict setObject:part forKey:@"part"]; [tmpDict setObject:date forKey:@"date"]; [updateDict setObject:tmpDict forKey:[NSNumber numberWithInt:[updateDict count]+1]]; [self.plist setObject:updateDict forKey:@"comments"]; if([self.plist writeToFile:self.plistPath atomically:YES]) { return YES; } else { return NO; } 

self.plist – это моя локальная копия файла на plistPath. структура моего plist выглядит так: https://img.skitch.com/20111026-tcjxp9ha4up8ggtfjy7ucgqcqe.png

надеюсь это поможет

Итак, это не каталог Documents, и по умолчанию у iOS нет каталога поддержки приложений, созданного в песочнице, поэтому вы не можете писать.

Вы можете либо изменить вызов метода для поиска каталога реальных документов:

 NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

Или, после того как вы получите путь к каталогу поддержки приложений , вы должны проверить, существует ли он уже и если нет, создайте его.

пожалуйста, просмотрите предыдущую запись, которая показывает другой способ копирования plist из mainBundle. Используйте [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error]; вместо этого.

Вы нашли ответ? если нет, вам нужно изменить эту строку:

 [updateDict setObject:tmpDict forKey:[NSNumber numberWithInt:[updateDict count]+1]]; 

в

 [updateDict setObject:tmpDict forKey:[NSString stringWithFormat:@"%d",[updateDict count]+1]]; 

Имя ключа – это строка, а не объект.

Давайте будем гением компьютера.