将数据保存到plist文件

时间:2010-08-25 12:47:05

标签: iphone objective-c plist

当我正在阅读我正在使用的数据时,我在保存到plist文件时遇到一些麻烦:

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return amounts.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    //Create Cell
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cell"];

    //Fill cell
    NSDictionary *budgetItem = [amounts objectAtIndex:indexPath.row];
    cell.textLabel.text = [budgetItem objectForKey:@"value"];
    cell.detailTextLabel.text = [budgetItem objectForKey:@"description"];

    //Return it
    return cell;
}

- (void) loadData{

    // Load items
    NSString *error;
    NSPropertyListFormat format;
    NSString *localizedPath = [[NSBundle mainBundle] pathForResource:@"savebudget" ofType:@"plist"];
    NSData *plistData = [NSData dataWithContentsOfFile:localizedPath];

    NSArray *amountData = [NSPropertyListSerialization propertyListFromData:plistData
                                                         mutabilityOption:NSPropertyListImmutable
                                                                   format:&format
                                                         errorDescription:&error];
    if (amountData) {
        self.amounts = [[NSMutableArray alloc] initWithCapacity:[amountData count]];
        for (NSDictionary *amountsDictionary in amountData) {
            [self.amounts addObject:amountsDictionary];
    }
}

使用我的资源文件夹中的静态plist文件可以正常工作,但是当我尝试创建自己的文件时,似乎没有任何事情发生:

-(void) addData { 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"saveBudget" ofType:@"plist"];
    NSMutableDictionary* plist = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
    [plist setValue:amountTxt.text forKey:@"value"];
    [plist writeToFile:path atomically:YES];
    [plist release];

}

- (IBAction)add:(id)sender {
    [self addData]; 
    [self.delegate budgetEnterMinusViewControllerDidFinish:self];
}

任何帮助超过欢迎...

1 个答案:

答案 0 :(得分:2)

唉。令人困惑和令人困惑的代码。第一:用它来加载:

NSString* path = [[NSBundle mainBundle] pathForResource:@"savebudget" ofType:@"plist"];

NSDictionary* amountData = [NSDictionary dictionaryWithContentsOfFile: path error: NULL];
if (amountData) {
    self.amounts = [NSMutableArray arrayWithArray: amountData];
}

注意,这里没有retain或alloc / init,因为你要分配一个保留属性。

所以真正的问题是:

你正在读一个你说的包含一系列词典的plist。但是当你添加数据时,你会尝试将一个字典写回同一个plist。

此外,在您的addData方法中,您实际上并未添加任何数据。

并且......如果从应用程序包中加载初始数据,则应在更改后将其写回~/Documents目录。当然,下次你的应用程序启动时,请从那里读回来。