1

編集:わかりました、userDefaultsに配列を保存することにしました...簡単なはずですよね?保存する:

NSUserDefaults *userDefs = [NSUserDefaults standardUserDefaults];
    [userDefs setObject:videoArray forKey:@"dataArray"];
    [userDefs synchronize];

ロード:

 NSUserDefaults *userDefs = [NSUserDefaults standardUserDefaults];
    videoArray = [[NSUserDefaults standardUserDefaults] mutableArrayValueForKey:@"dataArray"];

    [tableview reloadData];
    NSLog(@"%@",videoArray);

配列内にあるオブジェクトのクラス:

@interface DEVideoModel : NSObject

@property (copy) NSString *name;
@property (copy) NSImage *thumbnail;
@property (copy) NSDictionary *qualities;
@property (readwrite) float videoSize;
@property (readwrite) float progress;
@property (copy) NSString *filePath;
@property (copy) NSDate *datum;


@end

@synthesize name,filePath,videoSize,qualities,thumbnail,datum,progress;
-(id)init {
    self = [super init];
    if(self) {
        qualities = [[NSDictionary alloc]init];
        thumbnail = [[NSImage alloc]init];
    }
    return self;
}


@end

そして、私がそれをロードするとき、私のvideoArrayは(null)ですか?!理解できません。ちなみに、videoArrayはNSArrayではなくNSMutableArrayです。

4

1 に答える 1

2

コードでは、NSDataをNSCoderに書き込んでいるため、NSDataを読み取ってから配列に変換する必要があります。

NSURL *appSupportDir = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:&error];
NSString *path = [NSString stringWithFormat:@"%@/DEConvert.dat",[appSupportDir path]];
NSLog(@"%@",appSupportDir);
NSData *data = [NSData dataWithContentsOfFile:path];
NSMutableArray *arr = [NSKeyedUnarchiver unarchiveObjectWithData:data];

NSUserDefaultにオブジェクトを保存する

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:arr];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"your key"];

アーカイブ解除も同様に簡単です。

NSData *NewData = [[NSUserDefaults standardUserDefaults] objectForKey:@"your key"];
NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithData:NewData];
于 2013-03-24T16:43:53.823 に答える