2013-06-03 4 views
0

У меня вопрос, я создал plist фильмов. Корень типа словаря и Pixar типа массива с названиями фильмов 3 строки Я могу не читать из списка с помощью следующего кода не проблемаЗапись на mainBundle plist

NSString *path = [[NSBundle mainBundle] pathForResource:@"Movies" ofType:@"plist"]; 

NSMutableDictionary *movies =[[NSMutableDictionary alloc] initWithContentsOfFile:path]; 

здесь я не могу напечатать список без проблем. Я хочу добавить еще один фильм в этот список. поэтому я передал список массиву, а затем сохранил массив обратно в файл, но он не работает. любая идея, где я пошла не так?

NSMutableArray *array= [movies valueForKey:@"Pixar"]; 
NSString *[email protected]"Incredibles"; 
[array addObject:incredible]; 

[movies setObject:array forKey:@"Pixar"]; 

[movies writeToFile:path atomically:YES]; 
+3

Вы пошли не так, когда вы не искали этого. Duplicate ** много раз. ** –

+0

Я искал немного сейчас, если вы видите его, пожалуйста, пришлите мне ссылку, а не просто повторяйте дубликат – ifrapps

+1

Возможный дубликат [изменение plist не работает] (http: // stackoverflow.com/questions/6368752/modification-a-plist-is-not-working) ** и ** [как обновить файл plist в ios] (http://stackoverflow.com/questions/16870092/how-to -update-the-plist-file-in-ios) ** и ** [iphone write to file failed] (http://stackoverflow.com/questions/3386973/iphone-write-to-file-fails) - что так трудно в поиске? –

ответ

3

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

Один из подходов заключается в следующем:

  1. Смотрите, если файл существует в папке Documents.

  2. Если да, прочитайте его из папки Documents. Если нет, прочитайте его из комплекта.

  3. Когда закончите добавлять/удалять записи, напишите файл в папку Documents.

Таким образом:

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"Movies" ofType:@"plist"]; 
NSString *docsFolder = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; 
NSString *documentsPath = [docsFolder stringByAppendingPathComponent:@"Movies.plist"]; 

NSMutableDictionary *movies = nil; 

if ([[NSFileManager defaultManager] fileExistsAtPath:documentsPath]) 
    movies = [NSMutableDictionary dictionaryWithContentsOfFile:documentsPath]; 

if (!movies) 
    movies = [NSMutableDictionary dictionaryWithContentsOfFile:bundlePath]; 

// do whatever edits you want 

[movies writeToFile:documentsPath atomically:YES];