Как я уже сказал в теме, у меня возникают проблемы как с чтением, так и с записью в файл .plist. Я уже прочитал много возможных реализаций из других тем здесь и из книги, но все же я не могу заставить это работать, поэтому я хотел бы спросить ваше мнение. Прямо сейчас это происходит так:
У меня есть массив фильмов arrayMovies в диспетчере данных общего экземпляра. Я работаю все свое приложение на основе этого массива. Это всегда «доступно» из любой части приложения только этим:
[[iCultureDataManager sharedInstance]arrayMovies];
Поэтому, когда приложение завершает загрузку, я инициализирую arrayMovies из массива, который должен находиться в файле .plist, например так:
-(NSString* ) getFilePathForMovies{
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *documentsDirectory = [path objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingString:@"movies.plist"];
return filePath;
}
- (NSArray *) getMovies{
NSString *myPath = [self getFilePathForMovies];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:myPath];
NSArray* movies;
if(fileExists){
movies = [[NSArray alloc ]initWithContentsOfFile:myPath];
}
return movies;
}
и в инициализации я просто
_arrayMovies = [NSMutableArray arrayWithArray:[self getMovies]];
Одна вещь, которую я не понимаю, это почему BOOL fileExists всегда возвращает false, как будто он не находит файл .plist.
Чтобы сохранить массив для файла .plist, я делаю:
- (void)applicationDidEnterBackground:(UIApplication *)application {
[self addToMovies];
NSLog(@"DidEnterBackground: Adding to Movies...");
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
[self addToMovies];
NSLog(@"applicationWillEnterForeground: Adding to Movies...");
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
/*
Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
*/
}
- (void)applicationWillTerminate:(UIApplication *)application {
NSLog(@"applicationWillTerminate: Adding to Movies...");
[self addToMovies];
}
- (void) addToMovies{
NSString *myPath = [self getFilePathForMovies];
[[[iCultureDataManager sharedInstance]arrayMovies] writeToFile:myPath atomically:YES];
}
-(NSString* ) getFilePathForMovies{
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *documentsDirectory = [path objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingString:@"movies.plist"];
return filePath;
}
Я думаю, что это в значительной степени касается вопросов, но если я могу помочь вам с дополнительной информацией, не стесняйтесь сказать, потому что я действительно не понимаю, что происходит. Я не знаю, то ли я неправильно пишу в файл, то ли неправильно читаю, то ли еще что-то, что я делаю неправильно.
Большое спасибо за ваше время и помощь,
PS: теперь я нахожусь в точке, где fileExists всегда возвращает -1... :S