проверьте, существует ли plist, если не загружен отсюда - PullRequest
2 голосов
/ 06 сентября 2010

Я пытаюсь проверить, существует ли plist в моей папке с документами: если да, загрузите его, если нет - из папки ресурсов.

 - (void)viewWillAppear:(BOOL)animated
 {
 //to load downloaded file
 NSArray *docpaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
 NSString *documentsDirectory = [docpaths objectAtIndex:0]; 
 NSString *docpath = [documentsDirectory stringByAppendingPathComponent:@"downloadedfile.plist"];  

 //if document folder got file
  if(docpath != nil) 
   {
   NSDictionary *dict = [[NSDictionary alloc] 
     initWithContentsOfFile:docpath];
   self.allNames = dict;
   [dict release];
  }
  //on error it will try to read from disk 

  else {
  NSString *path = [[NSBundle mainBundle] pathForResource:@"resourcefile"
           ofType:@"plist"];
   NSDictionary *dict = [[NSDictionary alloc] 
     initWithContentsOfFile:path];
    self.allNames = dict;
   [dict release];

   } 
   [table reloadData];

Где я ошибся? plist не загружается из папки ресурсов.

Ответы [ 4 ]

2 голосов
/ 07 сентября 2010

Я думаю, что если вы создадите экземпляр NSFileManager, вы сможете использовать метод существующего файла

BOOL exists;
NSFileManager *fileManager = [NSFileManager defaultManager];

exists = [fileManager fileExistsAtPath:docPath];

if(exists == NO)
{
// do your thing
}
0 голосов
/ 30 июля 2015

Вот Swift-версия ответа Криса:

if (NSFileManager.defaultManager().fileExistsAtPath(path)) {
    // ...
}
0 голосов
/ 28 марта 2012

Я использовал аналогичный подход в одном из приложений, и он работал нормально для меня. Где при запуске приложения я проверяю файл plist внутри каталога документов и, если его там нет, он копируется из папки ресурсов.

NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;

NSString * plistName = @"FlowerList";
NSString * finalPath = [basePath stringByAppendingPathComponent: 
                       [NSString stringWithFormat: @"%@.plist", plistName]];
NSFileManager * fileManager = [NSFileManager defaultManager];

if(![fileManager fileExistsAtPath:finalPath]) 
{
    NSError *error;
    NSString * sourcePath = [[NSBundle mainBundle] pathForResource:@"FlowerList" ofType:@"plist"];
    [fileManager copyItemAtPath:sourcePath toPath:finalPath error:&error];      

}
0 голосов
/ 07 сентября 2010

Вам необходимо проверить, существует ли файл в папке «Документы» (с помощью NSFileManager или что-то в этом роде). stringByAppendingPathComponent: не волнует, существует ли возвращаемый путь, или он действителен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...