0

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

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

NSUserDefaults

SQLite 数据库

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

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

我想问一下是否有其他解决方案可以解决这个问题?

我希望我的话足够清楚,可以理解。

谢谢

4

2 回答 2

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]);
}
于 2010-11-04T06:38:13.770 回答
0

我建议您弄清楚 CorePlot 对象的根是什么类型的数据。如果是整数,则只需将它们存储在 NSUserDefaults 中,然后在重新打开应用程序时重新构建您的 NSMutableArray。另一种选择是将您的项目存储在单独的 plist 文件中。

于 2010-11-04T05:10:52.670 回答