将数组写入文件

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 下找到它的位置取决于应用程序是否被沙盒化。