在iOS中将键值对添加到plist文件时出现问题

时间:2012-08-30 22:20:51

标签: iphone objective-c ios

我在iphone应用程序中有一个视图控制器,它将一个键值对添加到plist文件中。然后,它会在具有表视图的视图控制器中显示整个plist。我遇到的问题是它只显示iPhone模拟器中的值,如果我完全重启应用程序,它只会显示新的键值对。

注意:plist文件应该添加到应用程序的资源目录中 更新:下面的代码是我的问题的解决方案,另外,为了查看plist中的新条目,我实现了一个刷新按钮,基本上运行viewDidLoad中的部分。

添加键值对的视图控制器的代码如下:

- (IBAction)addAction:(UIBarButtonItem *)sender
{    
    NSString *myFile=[[NSBundle mainBundle] pathForResource:@"File" ofType:@"plist"];

    dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:myFile];

    NSArray *docDir=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *filePath=[docDir objectAtIndex:0];
    NSString *plistPath=[filePath stringByAppendingPathComponent:@"File.plist"];

    //Check plist's existance using FileManager
    NSError *err=nil;
    NSFileManager *fManager=[NSFileManager defaultManager];

    if(![fManager fileExistsAtPath:plistPath])
    {
        //file doesn't exist, copy file from bundle to documents directory

        NSString *bundlePath=[[NSBundle mainBundle] pathForResource:@"File" ofType:@"plist"];
        [fManager copyItemAtPath:bundlePath toPath:plistPath error:&err];
    }

    //Get the dictionary from the plist's path
    dictionary =[[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
    //Manipulate the dictionary
    [dictionary setObject:textContent forKey:textName];
    //Again save in doc directory.
    [dictionary writeToFile:plistPath atomically:YES];    
}

这是在另一个视图控制器的表视图中显示plist的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Initialize table data

    NSArray *docDir=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *filePath=[docDir objectAtIndex:0];
    NSString *plistPath=[filePath stringByAppendingPathComponent:@"File.plist"];


    dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:**plistPath**];
    verses = [dictionary allKeys];

    [self.mainTableView reloadData];

}

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在设备上,主捆绑包只读取您要写入文档目录的路径。你可以通过

获得

NSArray paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

您的更改仅在启动时出现的原因是文件名不匹配