我正在尝试检查我的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
未从资源文件夹加载。
答案 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)) {
// ...
}