1

以下は、nsarchive を使用してデータを読み書きするクラスです。

データ.m

-(id)init {
    self        =   [super init];
    if(self) {
        arr     =   [[NSMutableArray alloc] init];
    }
    return self;
}

-(NSString *)getPath {
    NSArray     *paths          =   NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString    *documentPath;

    if ([paths count] > 0)
        documentPath            =   [paths objectAtIndex:0];

    NSString *draftDataPath     =   [documentPath stringByAppendingPathComponent:@"draftData.dat"];
    return draftDataPath;
}

-(void)saveDataToDisk {
    NSString *path              =   [self getPath];
    [NSKeyedArchiver archiveRootObject:arr toFile:path];

}

-(void)loadDataFromDisk {
    NSString    *path           =   [self getPath];
    self.arr                    =   [NSKeyedUnarchiver unarchiveObjectWithFile:path];
}

後で、arrCustomerClass.m を実行していくつかのオブジェクトを追加しています。

- (void) viewDidLoad {

Data *data = [[Data alloc] init];
[data.arr addObject:myObject1]
[data.arr addObject:myObject2]
[data.arr addObject:myObject3]
[data saveDataToDisk];
}

DisplayData.m で、data.arr を確認したい

- (void) viewDidLoad {
   Data *data = [[Data alloc] init];
   [data loadDataFromDisk];

   NSLog(@"length of array is %d",[data.arr count]);

}

コンソールで、私は得ています

length of array is 1

やっぱり3でいいと思いました。

手がかりがあれば、仕事の途中で間違いを犯したことを指摘してください。

4

2 に答える 2

5

したがって、「myObjects」はNSCodingに準拠していないと思われます。私はこれをしました:

NSMutableArray *arr = [NSMutableArray arrayWithCapacity:3];
[arr addObject:@"Hello"];
[arr addObject:@" "];
[arr addObject:@"World"];
BOOL ret = [NSKeyedArchiver archiveRootObject:arr toFile:[self getPath]];

NSArray *arr2 = [NSKeyedUnarchiver unarchiveObjectWithFile:[self getPath]];
NSLog(@"count = %d", [arr2 count]);

そして結果は「カウント=3」でした

于 2012-07-24T17:56:28.197 に答える
3

ここには、探していることを実行するにはコードが多すぎるように感じます。必要なのは次のとおりです。

[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:dataClass] forKey:NSUserDefaultString];
[[NSUserDefaults standardUserDefaults] synchronize];

それを保存します。

と:

NSData *someData = [[NSUserDefaults standardUserDefaults] objectForKey:NSUserDefaultString];
if (settingsData != nil)
{
    dataClass = [NSKeyedUnarchiver unarchiveObjectWithData:settingsData];
}

それを取得します。

于 2012-07-24T17:31:01.510 に答える