1
我已经写了一些从plist文件中提取信息的代码,并且做了一些事情然后最终将这些数据弹出到表中。字典和plist文件
这一切工作正常,问题是我写的代码从资源文件夹中的plist文件拉数据,但实际的文件将通过操作创建并存储在内存中。从新位置拉出代码时,我需要一些帮助。
当前工作代码:
- (void) loadData{
// Load items
NSString *error;
NSPropertyListFormat format;
NSString *path = [[NSBundle mainBundle] pathForResource:@"CalculatorData" ofType:@"plist"];
NSData *plistData = [NSData dataWithContentsOfFile:path];
NSArray *amountData = [NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error];
NSDictionary *amountData = [NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error];
if (amountData) {
self.amounts = [[NSMutableArray alloc] initWithCapacity:[amountData count]];
result = 0;
for (NSDictionary *amountsDictionary in amountData) {
[self.amounts addObject:amountsDictionary];
currentNumber = [[amountsDictionary objectForKey:@"Value"] floatValue];
if ([[amountsDictionary objectForKey:@"Type"] isEqualToString:@"Plus"]) {
result = result + currentNumber;
} else {
result = result - currentNumber;
}
}
//Set main amount
NSString *msg = [NSString stringWithFormat:@"£%.2f",result];
[lblAmount setText:msg];
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"Why not keep track of your income and expensies? Add new items below." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
}
我认为拉离新的文件位置的信息,我需要类似下面的东西,但似乎无法得到的输出与上面相同:
//Get file location
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"saveBudget.plist"];
// read it back in with different dictionary variable
NSMutableDictionary *amountData = [NSMutableDictionary dictionaryWithContentsOfFile:path];
if(amountData==nil){
NSLog(@"failed to retrieve dictionary from disk");
} else {
NSLog(@"%@", amountData);
}
创建plist文件的代码(这也需要一点的工作,因为它总是目前覆盖了什么做过,当我想它添加一个新的数组):
-(void) addData {
// create a dictionary to store a fruit's characteristics
NSMutableDictionary *items = [[NSMutableDictionary alloc] init];
[items setObject:@"10" forKey:@"Value"];
[items setObject:@"tester" forKey:@"Description"];
[items setObject:@"Plus" forKey:@"Type"];
// create a dictionary to store all fruits
NSMutableDictionary *plist = [[NSMutableDictionary alloc] init];
[plist setObject:items forKey:@"0"];
//Get file location
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"saveBudget.plist"];
// write plist to disk
[plist writeToFile:path atomically:YES];
}
这也需要一点的工作,因为我想它是:
是涉及<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>Date</key>
<string>27/9/10</string>
<key>Value</key>
<string>10.97</string>
<key>Description</key>
<string>PaperRound</string>
<key>Type</key>
<string>Plus</string>
</dict>
<dict>
<key>Date</key>
<string>27/9/10</string>
<key>Value</key>
<string>10.97</string>
<key>Description</key>
<string>PaperRound</string>
<key>Type</key>
<string>Plus</string>
</dict>
<dict>
<key>Date</key>
<string>27/9/10</string>
<key>Value</key>
<string>10.97</string>
<key>Description</key>
<string>PaperRound</string>
<key>Type</key>
<string>Plus</string>
</dict>
<dict>
<key>Date</key>
<string>27/9/10</string>
<key>Value</key>
<string>10.97</string>
<key>Description</key>
<string>PaperRound</string>
<key>Type</key>
<string>Plus</string>
</dict>
</array>
</plist>
对不起,长职位,但希望要的一切。 对此的任何帮助将是伟大的。
嗨Jlehr,谢谢你,简单的事情帮助这么多!最后还有一件事,我该如何添加到数组中,而不是替换?目前,当添加新项目时,它将覆盖当前项目? – jimbo 2010-09-15 07:59:44
我已经设法解决了这个问题,通过先读取数据,然后添加新项目(addObject)到它的工作... – jimbo 2010-09-15 13:33:26
嗨吉姆博士,对不起,我没有看到这一点。没错,要将对象添加到数组的末尾,可以使用'-addObject:';如果你想插入数组的其他地方,使用'-insertObject:atIndex:'。 – jlehr 2010-09-15 20:34:45