为什么我不能在项目中获得plist文件的路径?

时间:2011-09-21 11:48:28

标签: iphone objective-c xcode ios4 plist

我正在使用此函数来获取项目中plist文件的路径:

 + (NSString *) appDataPath{
NSLog(@"in appDataPath");
NSString *appDPath = nil;
// Get the main bundle for the app.
NSBundle* mainBundle = [NSBundle mainBundle];

if (mainBundle != nil) {
    NSLog(@"in appDataPath mainbundle");
    appDPath = [mainBundle pathForResource:@"MyAppSettings" ofType:@"plist"];
    NSLog(@"appDataPath: %@", appDPath);
}

return appDPath;
}

if if(mainBundle!= nil),但appDPath为null。同样的功能正在另一个项目中工作。为什么不在这里工作?有没有其他方法可以在项目中获取plist文件的路径。提前谢谢。

4 个答案:

答案 0 :(得分:2)

检查案例。 iOS的文件系统区分大小写。

检查文件是否在目录中。在这种情况下,您需要致电pathForResource:ofType:inDirectory

检查您正在构建的目标的文件是否已启用。如果不是,则不会将其复制到捆绑包中。

答案 1 :(得分:2)

如果你有任何机会将你的plist放在子文件夹中,那么你应该考虑使用

[[NSBundle mainBundle] pathForResource: ofType: inDirectory:]

也可以指定目录。

答案 2 :(得分:1)

我正在使用此代码在我的项目中找到plist路径。

-(void)CreatePlistPath
{
    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    path = [[documentsDirectory stringByAppendingPathComponent:@"data.plist"] retain];

    NSFileManager *fileManager = [NSFileManager defaultManager];

    if (![fileManager fileExistsAtPath: path])
    {
        NSString *bundle =[[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];

        [fileManager copyItemAtPath:bundle toPath: path error:&error];
    }
}

答案 3 :(得分:1)

试试这个

+ (NSString *) appDataPath{

     NSString *plistPath;
     NSString *rootPath = [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory,
                                                                   NSUserDomainMask,
                                                                   YES) objectAtIndex:0];
    plistPath = [rootPath stringByAppendingPathComponent:@"MyAppSettings.plist"];

    if ([[NSFileManager defaultManager] fileExistsAtPath:plistPath]) {
          plistPath = [[NSBundle mainBundle] pathForResource:@"MyAppSettings" 
                                                      ofType:@"plist"];
         return plistPath;
    }
    else 
    // No plist found       
}