【问题标题】:Save NSMutableArray to load when reopenning iphone app重新打开 iphone 应用程序时保存 NSMutableArray 以加载
【发布时间】:2010-11-04 05:08:25
【问题描述】:
我有一个 NSMutableArray,这个数组中的每个项目都是不同的类。在每个类中都有许多字段,例如 CPPlot、标识符、...(我正在使用 CorePlot 开发股票应用程序)。现在我想存储这个 NSMutableArray 以在用户重新打开应用程序时加载,这将加载他们之前使用的所有图表。
我试图弄清楚如何在 Stackoverflow 中做到这一点。我发现有两种解决方案:
NSUserDefaults
SQLite 数据库
在 NSUserDefaults 中,当我想存储 NSMutableArray 时,我必须使用 NSKeyedArchiver 来实现对数组对象的归档和取消归档,还要对数组对象中的每个项目进行 NSCoding 协议。但是我不能做这个解决方案,因为在每个项目中,它都有一些来自 CorePlot 库的字段,所以我不能对这些字段使用 NSCoding。
SQLite 数据库,我不能使用这个解决方案,因为数组对象中的每个项目都是不同的类。
请问有没有其他办法可以解决这个问题?
我希望我的话足够清楚,可以理解。
谢谢
【问题讨论】:
标签:
iphone
sqlite
nsuserdefaults
core-plot
nscoding
【解决方案1】:
我建议您弄清楚 CorePlot 对象的根是什么类型的数据。如果是整数,则只需将它们存储在 NSUserDefaults 中,然后在重新打开应用程序时重新构建您的 NSMutableArray。另一种选择是将您的项目存储在单独的 plist 文件中。
【解决方案2】:
使用此方法保存:
- (NSArray *)applicationDataFromFile:(NSString *)fileName {
NSArray *paths = NSSearchPathForDirecotiresInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory
stringByAppendingPathComponent:fileName];
NSArray *myData = [NSArray arrayWithContentsOfFile:appFile];
return myData;
}
- (BOOL)saveToFileForStringArray:(NSMutableArray *)array
toFile:(NSString *)fileName {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
if (!documentsDirectory) {
NSLog(@"Documents directory not found!");
return NO;
}
NSString *appFile = [documentsDirectory
stringByAppendingPathComponent:fileName];
return ([array writeToFile:appFile atomically:YES]);
}