Невозможно загрузить архивный NSMutableArray в новый NSMutableArray.
-
19-09-2019 - |
Вопрос
Приложение без проблем сохранит NSMutableArray в архив, но как только я попытаюсь загрузить NSMutableArray обратно в новый NSMutableArray @ viewDidLoad, приложение выйдет из строя.Я положил точку перерыва в конце кода, где "temparray = [Unarciver decodeobjectforkey: kdatakey46];"; и Temparray загружается архивированным массивом, но когда я прохожу через «for» loop @ »[poollistdata addobject: testtemp];»; «Poollistdata» не содержит данные из «Temparray».Кроме того, если я не использовал точку останова и просто позволил приложению попытаться загрузиться, приложение выйдет из строя... Что вы думаете, ребята?
Спасибо за ваше время!Джефф
NSString *filePath = [self dataFilePath];
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])
{
NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
field1.text = [unarchiver decodeObjectForKey:kDataKey1];
// snip another bunch of fields
field37.text = [unarchiver decodeObjectForKey:kDataKey37];
soundOn = [unarchiver decodeBoolForKey:kDataKey38];
soundVolumeSlider.value = [unarchiver decodeDoubleForKey:kDataKey39];
soundVolumeValue = [unarchiver decodeDoubleForKey:kDataKey39];
tempArray = [unarchiver decodeObjectForKey:kDataKey46];
[unarchiver finishDecoding];
for(int i = 0; i < [tempArray count]; i++)
{
NSData *testTemp = 0;
//NSString *temp = [tempArray objectAtIndex:i];
testTemp = [tempArray objectAtIndex:i];
[poolListData addObject:testTemp];
//[poolListData addObjectsFromArray:tempArray];
}
/*
firstNameTextField.text = field1.text;
lastNameTextField.text = field2.text;
adressTextField.text = field3.text;
emailTextField.text = field4.text;
*/
[tempArray release];
[unarchiver release];
[data release];
}
Решение
Я считаю, что это, по крайней мере частично, ошибка управления памятью.А decodeObjectForKey
вызов возвращает автоматически выпущенный объект, поэтому освобождение объекта является ошибкой. tempArray
в конце функции.Это может быть причиной сбоя вашего приложения.Что касается poolListData
не хранит содержимое разархивированного массива, может быть, вы просто забыли его инициализировать и пытаетесь добавить элементы в нулевой массив?
Другие советы
Если вы вызываете unarchive и не видите никаких значений, значит, в массиве содержится что-то, что невозможно заархивировать.Я считаю, что UIImage может быть примером того, что вы можете иметь в массиве, чтобы попытаться сохранить.Ключ к вашей проблеме заключается в том, какие типы у вас есть в этом tempArray, когда вы его архивируете.