将数组写入文件
writing an array onto a file
我正在自学 Objective C(仍然),我正在阅读 The Big Nerd Ranch Guide 这本书。第一次通读一遍,现在我又读了一遍,但在阅读时做 Xcode 上的练习。
我陷入了关于编写 plists 的章节。我已经准确地复制了代码并且没有警告。我确定这与路径有关。
代码:
NSMutableArray *stocks = [[NSMutableArray alloc]init];
NSMutableDictionary *stock = [NSMutableDictionary dictionary];
[stock setObject:@"APPL" forKey:@"symbol"];
[stock setObject:[NSNumber numberWithInt:200] forKey:@"shares"];
[stocks addObject:stock];
stock = [NSMutableDictionary dictionary];
[stock setObject:@"GOOG" forKey:@"symbol"];
[stock setObject:[NSNumber numberWithInt:160] forKey:@"shares"];
[stocks addObject:stock];
[stocks writeToFile:@"/temp/stocks.plist" atomically:YES];
NSArray *stocklist = [NSArray arrayWithContentsOfFile:@"/temp/stocks.plist"];
for (NSDictionary *d in stocklist){
NSLog(@"I have %@ shares of %@", [d objectForKey:@"shares"],[d objectForKey:@"symbol"]);
}
}
它没有打印任何东西。我在 mac 中的任何地方都找不到文件 stock.plist。这是我第一次尝试保存到文件,所以我可能忘记了一些简单的事情?发送
是的,这是导致问题的路径,因为 /temp
将不存在于 iOS 设备或 Mac 上(您没有说明问题中的平台):
[stocks writeToFile:@"/temp/stocks.plist" atomically:YES];
/tmp
会 可能 工作,但写入应用程序自己的文档文件夹是正常的,我很惊讶这本书没有涵盖这一点。像这样:
NSString *documentsFolder = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *fullpath = [documentsFolder stringByAppendingPathComponent:@"stocks.plist"];
[stocks writeToFile:fullpath atomically:YES];
这将适用于 iOS 和 OSX,但您在 OSX 下找到它的位置取决于应用程序是否被沙盒化。
我正在自学 Objective C(仍然),我正在阅读 The Big Nerd Ranch Guide 这本书。第一次通读一遍,现在我又读了一遍,但在阅读时做 Xcode 上的练习。 我陷入了关于编写 plists 的章节。我已经准确地复制了代码并且没有警告。我确定这与路径有关。
代码:
NSMutableArray *stocks = [[NSMutableArray alloc]init];
NSMutableDictionary *stock = [NSMutableDictionary dictionary];
[stock setObject:@"APPL" forKey:@"symbol"];
[stock setObject:[NSNumber numberWithInt:200] forKey:@"shares"];
[stocks addObject:stock];
stock = [NSMutableDictionary dictionary];
[stock setObject:@"GOOG" forKey:@"symbol"];
[stock setObject:[NSNumber numberWithInt:160] forKey:@"shares"];
[stocks addObject:stock];
[stocks writeToFile:@"/temp/stocks.plist" atomically:YES];
NSArray *stocklist = [NSArray arrayWithContentsOfFile:@"/temp/stocks.plist"];
for (NSDictionary *d in stocklist){
NSLog(@"I have %@ shares of %@", [d objectForKey:@"shares"],[d objectForKey:@"symbol"]);
}
}
它没有打印任何东西。我在 mac 中的任何地方都找不到文件 stock.plist。这是我第一次尝试保存到文件,所以我可能忘记了一些简单的事情?发送
是的,这是导致问题的路径,因为 /temp
将不存在于 iOS 设备或 Mac 上(您没有说明问题中的平台):
[stocks writeToFile:@"/temp/stocks.plist" atomically:YES];
/tmp
会 可能 工作,但写入应用程序自己的文档文件夹是正常的,我很惊讶这本书没有涵盖这一点。像这样:
NSString *documentsFolder = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *fullpath = [documentsFolder stringByAppendingPathComponent:@"stocks.plist"];
[stocks writeToFile:fullpath atomically:YES];
这将适用于 iOS 和 OSX,但您在 OSX 下找到它的位置取决于应用程序是否被沙盒化。