检查plist是否存在,如果没有从这里加载

时间:2010-09-06 12:09:21

标签: iphone objective-c xcode plist

我正在尝试检查我的doc文件夹中是否存在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 个答案:

答案 0 :(得分:2)

我认为如果您创建NSFileManager的实例,则可以使用文件存在方法

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

exists = [fileManager fileExistsAtPath:docPath];

if(exists == NO)
{
// do your thing
}

答案 1 :(得分:0)

您需要检查文档文件夹中是否存在该文件(使用NSFileManager或类似的内容)。 stringByAppendingPathComponent:并不关心它返回的路径是否存在或是否有效。

答案 2 :(得分:0)

我在其中一个应用程序中使用了类似的方法,它对我来说很好。在应用程序启动时,我检查文档目录中的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];      

}

答案 3 :(得分:0)

以下是克里斯答案的Swift版本:

if (NSFileManager.defaultManager().fileExistsAtPath(path)) {
    // ...
}