当我正在阅读我正在使用的数据时,我在保存到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];
}
任何帮助超过欢迎...
答案 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
目录。当然,下次你的应用程序启动时,请从那里读回来。