Как архивировать NSArray пользовательских объектов в файл в Objective-C - PullRequest
4 голосов
/ 16 августа 2010

Можете ли вы показать мне синтаксис или любые примеры программ для архивации NSArray пользовательских объектов в Objective-C?

Ответы [ 2 ]

12 голосов
/ 16 августа 2010

Извлечение 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.

2 голосов
/ 17 августа 2010

Если вы хотите сохранить в файл (вместо использования NSUserDefaults), вы можете использовать -initWithContentsOfFile: для загрузки и -writeToFile:atomically: для сохранения, используя NSArrays.

Пример:

- (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

...