我有一个NSMutableArray,这个数组中的每个项都是不同的类。在每个类中都有许多字段,如CPPlot,identifier,...(我正在使用CorePlot开发一个库存应用程序)。现在我想在用户重新打开应用程序时存储此NSMutableArray,这将加载他们之前使用的所有图表。
我试着弄清楚如何在Stackoverflow中做到这一点。我发现有两种解决方案:
NSUserDefaults的
SQLite数据库
在NSUserDefaults中,当我想存储NSMutableArray时,我必须使用NSKeyedArchiver来实现存档和取消存档数组对象,同时对数组对象中的每个项执行NSCoding协议。但我无法做到这一点,因为在每个项目中,它都有一些来自CorePlot库的字段,所以我不能将NSCoding用于这些字段。
SQLite数据库,我无法使用此解决方案,因为数组对象中的每个项都是不同的类。
我想问一下是否有其他解决方案来解决这个问题?
我希望我的话能够清楚地理解。
由于
答案 0 :(得分:0)
我建议您弄清楚CorePlot对象根目录中的数据类型。如果是整数,那么只需将它们存储在NSUserDefaults中,然后在重新打开应用程序时重建NSMutableArray。另一种选择是将您的项目存储在单独的plist文件中。
答案 1 :(得分:0)
使用此方法保存:
- (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]);
}