我正在教自己目标C(仍然),我正在阅读“The Big Nerd Ranch Guide”一书。第一次阅读全部内容,现在我再次这样做,但在阅读时在Xcode上进行练习。 我陷入了关于编写plist的章节。我已经完全复制了代码而没有警告。我确信这与路径有关。
代码:
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。这是我第一次尝试保存到文件,所以它可能是我忘记的简单事情? TX
答案 0 :(得分:1)
是的,这是导致问题的路径,因为/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下找到它将取决于应用程序是否为沙盒。