【发布时间】:2011-09-05 04:49:50
【问题描述】:
我有以下代码块:
NSMutableArray* mergedSymbolsArray = [NSMutableArray array];
for (NSDictionary* aSymbol in localSet) {
NSLog(@"Symbol:%@",[aSymbol valueForKey:@"symbol"]);
[mergedSymbolsArray addObject:aSymbol];
}
[Utils writeObjectToPList:mergedSymbolsArray];
tickers = [Utils getDataFromPList];
这是我读取/写入 plist 的代码:
+ (void)writeObjectToPList:(id)myData {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"mobile-watchlist.plist"];
[myData writeToFile:path atomically:YES];
}
+(NSMutableArray*)getDataFromPList
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"mobile-watchlist.plist"];
NSMutableArray* myArray = [[NSMutableArray alloc] initWithContentsOfFile:path];
NSLog(@"READING -- PList Data Count: %d", [myArray count]);
return [[NSMutableArray alloc] initWithContentsOfFile:path];
}
由于某种原因,mergedSymbolsArray 不会写入 plist。我不知道为什么?
我可以将以下内容写入 plist:
[tickers addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"GOOG", @"symbol", @"2044", @"id", nil]];
[tickers addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"AAPL", @"symbol", @"686", @"id", nil]];
[tickers addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"YHOO", @"symbol", @"4177", @"id", nil]];
[Utils writeObjectToPList:tickers];
为什么第一段代码不写入 plist?
附加说明: 下面是 mergeSymbolsArray 包含的字典示例:
{
"charts_count" = 2;
"created_at" = "2010-04-12T16:37:32Z";
exchange = NASDAQ;
"followers_count" = 259;
id = 8404;
industry = "<null>";
"messages_count" = 1436;
ric = "GRPN.O";
sector = "<null>";
symbol = GRPN;
title = Groupon;
"updated_at" = "2011-09-05T04:17:56Z";
}
我猜 writeToFile:atomically 方法失败是因为无法写入?
【问题讨论】:
-
+(void)writeObjectToPList:(id)myData 。尝试将 (id) 更改为 NSMutableArray....type
-
@booleanboy 我把它改成了 NSMutableArray,不幸的是结果一样
-
在将数据添加到 mergeSymbolsArray 后,使用 NSLog 检查数据是否真的开始存储......并尝试使用 alloc 而不是 autorelease 数组......
-
writeToFile 实际上返回 NO。我改为分配而不是自动释放,结果相同。为什么 writeToFile 返回 NO?
-
尝试以原子方式设置为 NO
标签: iphone objective-c cocoa-touch nsmutablearray plist