【问题标题】:writing an array onto a file将数组写入文件
【发布时间】:2016-04-14 16:50:06
【问题描述】:

我正在自学 Objective 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。这是我第一次尝试保存到文件,所以我可能忘记了一些简单的事情?发送

【问题讨论】:

  • 您发布的代码从文件中读取,而不是写入文件。能发下写作部分吗?在我的脑海中,我怀疑你没有写文件的权限,但不能不看代码就说。

标签: objective-c plist saving-data


【解决方案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 下的何处找到它取决于该应用是否为沙盒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    相关资源
    最近更新 更多