0

NSMutableArray があります。この配列の各項目は異なるクラスです。各クラスには、CPPlot、識別子などの多くのフィールドがあります(私はCorePlotを使用してストックアプリケーションを開発しています)。ここで、この NSMutableArray を保存して、ユーザーがアプリケーションを再度開いたときにロードするようにします。これにより、以前に使用したすべてのチャートがロードされます。

私は Stackoverflow でそれを行う方法を理解しようとしています。そして、2つの解決策があることがわかりました:

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 に答える