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

Я создал save.plist в папке с ресурсами. Я написал некоторые данные внутри этого напрямую (без использования кодирования). Я могу прочитать эти данные, но я не могу писать код в тот же файл save.plist. Используя следующий код, я пытаюсь записать данные, но он сохраняется в моем .app plist. Код здесь

NSString *errorDesc = nil; NSPropertyListFormat format; NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"save" ofType:@"plist"]; NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath]; NSMutableDictionary *temp = (NSMutableDictionary *)[NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&errorDesc]; if (!temp) { NSLog(errorDesc); [errorDesc release]; } // [temp setValue:@"123" forKey:@"line1"]; // [temp writeToFile:plistPath atomically: YES]; //Reading data from save.plist NSLog([temp objectForKey:@"name"]); NSLog([temp objectForKey:@"wish"]); NSNumber *num=[temp valueForKey:@"roll"]; int i=[num intValue]; printf("%d",i); //writitng the data in save.plist [temp setValue:@"green" forKey:@"color"]; [temp writeToFile:plistPath atomically: NO]; NSMutableDictionary *temp1 = (NSMutableDictionary *)[NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&errorDesc]; NSLog([temp objectForKey:@"color"]); 

Я хочу, чтобы данные, которые я хочу написать, должны записываться только в файл save.plist, который хранится в ссылках. Я новичок в этой концепции. Поэтому, если кто-нибудь знает это, пожалуйста, помогите мне. Заранее спасибо. 🙂

Я не знаю, понимаю ли я ваш вопрос, но если вы хотите записать в .plist в своем пакете .app, вы, вероятно, делаете что-то неправильно. Если вы хотите сохранить настройки, вам следует использовать NSUserDefaults .
Если вы действительно хотите изменить связанный .plist – вот какой-то код:

 NSString *plistPath = nil; NSFileManager *manager = [NSFileManager defaultManager]; if (plistPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Contents/Info.plist"]) { if ([manager isWritableFileAtPath:plistPath]) { NSMutableDictionary *infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath]; [infoDict setObject:[NSNumber numberWithBool:hidden] forKey:@"LSUIElement"]; [infoDict writeToFile:plistPath atomically:NO]; [manager changeFileAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] atPath: [[NSBundle mainBundle] bundlePath]]; } } 

Обновить:
Нейт Флинк отметил, что некоторые из методов NSFileManager, используемые выше, устарели. Он отправил ответ с приведенными ниже методами замены: https://stackoverflow.com/a/12428472/100848

Обновленная версия оригинального удивительного примера Weichsel (спасибо!). Xcode бросил пару предупреждений, один из которых является устаревшим методом в NSFileManager. Обновлено здесь с использованием устаревших методов от iOS 5.1

  NSString *plistPath = nil; NSFileManager *manager = [NSFileManager defaultManager]; if ((plistPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"mySpecial/PathTo.plist"])) { if ([manager isWritableFileAtPath:plistPath]) { NSMutableDictionary *infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath]; [infoDict setObject:@"foo object" forKey:@"fookey"]; [infoDict writeToFile:plistPath atomically:NO]; [manager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] ofItemAtPath:[[NSBundle mainBundle] bundlePath] error:nil]; } } 

Когда вы создадите приложение, он создаст исполняемый файл «appName.app», и все файлы будут созданы в комплекте. Поэтому при запуске приложения вы не можете получить доступ к папке ресурсов, потому что все данные находятся в комплекте (а не в папке).

Однако вы можете получить доступ к папке temp, содержащей некоторую информацию о приложении. Вы можете найти временную папку здесь: Открыть поисковик – нажмите на свое имя пользователя (под PLACES) – Библиотека – Поддержка приложений – iPhone Simulator – Пользовательские приложения – (здесь вы можете найти все временные папки вашего iPhone приложения)

Вы можете получить доступ к этой временной папке:

 NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); NSString *documentsDirectory = [paths objectAtIndex:0]; 

Если вы назовете файл save.plist, вы можете получить доступ к нему следующим образом:

 NSString *filePath = [documentsDirectory stringByAppendingString:@"_save.plist"]; 

Затем вы просто сохраните файл в этом файлеPath, и он появится во временной папке с именем «Documents_save.plist».

* Обратите внимание, что имя папки temp меняется каждый раз, когда вы запускаете приложение.

Рекомендовать книгу для вас: «Начало разработки iPhone – изучение iPhone SDK». В главе 11 вы можете найти то, что хотите.

Чтобы обобщить некоторые другие ответы:

Проблема в том, что вы пытаетесь записать файл обратно в папку, содержащую ваше приложение. Эта папка не доступна для записи во время выполнения. Все, что вы делаете, прекрасно, вам просто нужно выбрать другое место для записи своего файла.

Вы можете использовать функцию NSSearchPathForDirectoriesInDomains, чтобы найти более подходящую папку для этих данных. (Например, папку @ «Документы».)

попробуй это:

 -(void)add:(NSRunningApplication *) app { if ([self contains:app]) return; [self.apps addObject:app.localizedName]; [self.apps writeToFile:self.dataFile atomically:YES]; } 

от «Программирование cocoa».

вам нужно скопировать ваш plist в каталог документов … потому что вы ничего не можете сохранить без сохранения в файл документа … при копировании он позволит писать / изменять на plist

  • Синглтон в iOS 5?
  • Потяните, чтобы обновить UITableView без UITableViewController
  • Программно извлекать использование памяти на iPhone
  • Перемещение фигуры Stick, опорных точек, анимации или чего-то еще ...?
  • Как установить жирный шрифт и курсив на UILabel iPhone / iPad?
  • Добавление изображений в UITextView
  • Сортировка NSArray строк или объектов даты
  • Как распечатать имя метода и номер строки и условно отключить NSLog?
  • Возможно открытие всплывающих ссылок в UIWebView?
  • захват себя в этом блоке, вероятно, приведет к циклу сохранения
  • Получение видимого прямоугольника содержимого UIScrollView
  • Давайте будем гением компьютера.