Как заархивировать Nsarray пользовательских объектов для файла в объекте

StackOverflow https://stackoverflow.com/questions/3493156

Вопрос

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

Это было полезно?

Решение

Проверить 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 методы.

Другие советы

Если вы хотите сохранить файл (вместо того, чтобы использовать 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top