4

Objective-C でカスタム オブジェクトの NSArray をアーカイブするための構文またはサンプル プログラムを教えてもらえますか?

4

2 に答える 2

12

NSUserDefaultsを確認してください。

アレイをアーカイブするには、次のコードを使用できます。

[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:myArray] forKey:@"mySavedArray"];

カスタム オブジェクトを配列にロードするには、次のコードを使用できます。

NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *savedArray = [currentDefaults objectForKey:@"mySavedArray"];
if (savedArray != nil)
{
        NSArray *oldArray = [NSKeyedUnarchiver unarchiveObjectWithData:savedArray];
        if (oldArray != nil) {
                customObjectArray = [[NSMutableArray alloc] initWithArray:oldSavedArray];
        } else {
                customObjectArray = [[NSMutableArray alloc] init];
        }
}

nilアプリがクラッシュする可能性があるため、ユーザーの既定値から返されたデータが ではないことを確認してください。

他に行う必要があるのは、カスタム オブジェクトをNSCoderプロトコルに準拠させることです。-(void)encodeWithCoder:(NSCoder *)coderおよび-(id)initWithCoder:(NSCoder *)coderメソッドを使用してこれを行うことができます。

于 2010-08-16T13:20:32.320 に答える
2

(NSUserDefaults を使用するのではなく) ファイルに保存する場合は、NSArrays を使用-initWithContentsOfFile:してロードおよび-writeToFile:atomically:保存することができます。

例:

- (NSArray *)loadMyArray
{
    NSArray *arr = [NSArray arrayWithContentsOfFile:
        [NSString stringWithFormat:@"%@/myArrayFile", NSHomeDirectory()]];
    return arr;
}

// returns success flag
- (BOOL)saveMyArray:(NSArray *)myArray
{
    BOOL success = [myArray writeToFile:
        [NSString stringWithFormat:@"%@/myArrayFile", NSHomeDirectory()]];
    return success;
}

ここには、これを行うさまざまな方法の例がたくさんあります: http://www.cocoacast.com/?q=node/167

于 2010-08-17T11:04:59.907 に答える