Как заархивировать Nsarray пользовательских объектов для файла в объекте
-
28-09-2019 - |
Вопрос
Можете ли вы показать мне синтаксис или любые образцы программ для архивирования 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.