2010-08-25 175 views
1

我有一個小麻煩保存到一個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]; 
} 

任何幫助多人歡迎...

回答

2

唉。可怕和混亂的代碼。第一:用這個,而不是加載:

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

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

注意,沒有保留或分配/初始化這裏因爲你是分配給一個固定屬性。

所以,真正的問題:

你正在讀一plist中說,你說包含字典的數組。但是,當你添加數據時,你試圖將單個字典寫回同一個plist。

另外,在您的addData方法中,您實際上並沒有添加任何數據。

And ...如果您從您的應用程序包中加載初始數據,那麼在更改它之後,您應該將它重新寫回到您的~/Documents目錄中。當然,下次您的應用程序啓動時,還要從那裏讀取它。

+0

嗨St3fan,我該如何改變它來正確寫入?找不到任何信息,只能寫回單個數組/字典... – jimbo 2010-08-27 08:20:17