将数组写入文件

时间:2016-04-14 16:50:06

标签: objective-c plist saving-data

我正在教自己目标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

1 个答案:

答案 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下找到它将取决于应用程序是否为沙盒。