如何找到plist的文件路径?

时间:2012-08-18 00:09:48

标签: ios xcode uitableview plist

我正在尝试将plist加载到UITableView中。我是新手使用pLists和tableViews,但我知道我需要使用这些内容。我的问题是,虽然“filePath”在哪里,我实际上并不知道如何放入我的pList?

list = [NSArray arrayWithContentsOfFile:filePath];

除了获取文件路径之外,还有其他任何有关代码如何执行此操作的建议将非常感激。比如我需要在我的.h文件中添加任何内容吗?感谢。

1 个答案:

答案 0 :(得分:-1)

假设您已经为项目添加了.plist,我已经创建了一个可以添加到项目中的类,它将获取信息并将信息保存到给定的.plist中。它是一个功能单一的单身人士,所以你可以从任何地方打电话。

首先,创建一个名为“GetAndSaveData”的新NSObject文件,然后将以下代码发布到.h:

@interface GetAndSaveData : NSObject{
    NSMutableDictionary *allData;
    NSString *path;
}

+(GetAndSaveData *)sharedGetAndSave;
-(NSMutableArray *)arrayForKey:(NSString *)dataList;

-(void)setData:(NSMutableArray *)array ForKey:(NSString *)dataList;

@end

和以下代码进入.m:

static GetAndSaveData *sharedGetAndSave;

@implementation GetAndSaveData

-(id)init{

    self = [super init];

    NSError *error;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //1
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    path = [documentsDirectory stringByAppendingPathComponent:@"data.plist"]; 


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

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

    allData = [[NSMutableDictionary alloc] initWithContentsOfFile: path]; 

    return self;
}


-(NSMutableArray *)arrayForKey:(NSString *)dataList{
    NSMutableArray *array = [allData objectForKey:dataList];

    return array;
}

-(void)setData:(NSMutableArray *)array ForKey:(NSString *)dataList{

    [allData setObject:array forKey:dataList];
    [allData writeToFile:path atomically:YES];

    if(![allData writeToFile:path atomically:YES])
    {
        NSLog(@".plist writing was unsuccessful");

    }

}

+(GetAndSaveData *)sharedGetAndSave{
    if (!sharedGetAndSave) {
        sharedGetAndSave = [[GetAndSaveData alloc] init];
    }
    return sharedGetAndSave;
}

+(id)allocWithZone:(NSZone *)zone{
    if (!sharedGetAndSave) {
        sharedGetAndSave = [super allocWithZone:zone];
        return sharedGetAndSave;
    } else {
        return nil;
    }
}

-(id)copyWithZone:(NSZone *)zone{
    return self;
}
@end

您可以更改功能以获取和保存不同类型的数据。您可以通过导入.h文件在视图控制器中使用它,并执行以下操作:

myMutableArray = [[GetAndSaveData sharedGetAndSave]arrayForKey:myKey];