在重新打开iphone应用程序时保存NSMutableArray以加载

时间:2010-11-04 05:08:26

标签: iphone sqlite nsuserdefaults core-plot nscoding

我有一个NSMutableArray,这个数组中的每个项都是不同的类。在每个类中都有许多字段,如CPPlot,identifier,...(我正在使用CorePlot开发一个库存应用程序)。现在我想在用户重新打开应用程序时存储此NSMutableArray,这将加载他们之前使用的所有图表。

我试着弄清楚如何在Stackoverflow中做到这一点。我发现有两种解决方案:

NSUserDefaults的

SQLite数据库

  1. 在NSUserDefaults中,当我想存储NSMutableArray时,我必须使用NSKeyedArchiver来实现存档和取消存档数组对象,同时对数组对象中的每个项执行NSCoding协议。但我无法做到这一点,因为在每个项目中,它都有一些来自CorePlot库的字段,所以我不能将NSCoding用于这些字段。

  2. SQLite数据库,我无法使用此解决方案,因为数组对象中的每个项都是不同的类。

  3. 我想问一下是否有其他解决方案来解决这个问题?

    我希望我的话能够清楚地理解。

    由于

2 个答案:

答案 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]);
}