Я не совсем уверен, но я думаю, что
+ (id) unarchiveObjectWithData: (NSData *) данные
дает вам автоматически выпущенный объект, так что вы можете сохранить его. И я думаю, что это даст вам неизменяемый объект, поэтому, когда вы попытаетесь добавить или удалить объекты из него, вы получите ошибку (я не уверен в этом, но я думаю, что когда-то был в этой ситуации). .)
Я бы переписал какую-то часть вашего кода:
...
if (data == nil)
{
arrayImage = [[NSMutableArray alloc] init];
} else
{
//arrayImage = [[NSMutableArray alloc] init]; //why to allocate and initialize if you are goind to unarchive it?
//arrayImage = [[NSKeyedUnarchiver unarchiveObjectWithData:data] retain]; //note the retain here
NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithData:data]; //the unarchive won't mantain mutability (I guess).
arrayImage = [NSMutableArray arrayWithArray:arr]; //create a mutable copy
}
...