В приложении для iOS, которое я создаю для школьного проекта, у меня возникают проблемы с сохранением данных, хранящихся в NSMutableArray. Массив создается в файле делегата приложения, а затем делегаты для него создаются в различных других файлах контроллера представления. Данные, хранящиеся в массиве, состоят из пользовательских классов, состоящих из NSStrings и NSNumbers в качестве свойств.
Я читал и следил за многими примерами на этом сайте в течение недели, но я не могу понять это. Я также изучил основные данные, но я не мог понять, как реализовать это без полного перезапуска, и, к сожалению, у меня не хватает времени.
Вещи, которые я пробовал:
Архивирование в методе WillTerminate. (ActivityArray - это мой массив)
- (void)applicationWillTerminate:(UIApplication *)application {
NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* arrayFile = [documentsPath stringByAppendingPathComponent:@"arrayFile"];
[NSKeyedArchiver archiveRootObject:activityArray toFile:arrayFile];
[activityArray release];
И затем разархивирование в методе didFinishLaunchingWithOptions файла AppDelegate
NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *arrayFile = [documentsPath stringByAppendingPathComponent:@"arrayFile"];
if ([fileManager fileExistsAtPath:arrayFile]) {
NSLog(@"yes");
activityArray = [NSMutableArray arrayWithContentsOfFile:arrayFile];
} else {
activityArray = [[NSMutableArray alloc] init];
}
В соответствии с предложениями по другим вопросам, я сделал следующее в пользовательских классах, которые у меня есть (в этом классе 2 NSStrings, activityName и activityDescription).
- initWithCoder:(NSCoder *)aCoder {
self = [super init];
activityName = [[aCoder decodeObjectForKey:@"activityName"] retain];
activityDescription = [[aCoder decodeObjectForKey:@"activityDescription"] retain];
return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:activityName forKey:@"activityName"];
[aCoder encodeObject:activityDescription forKey:@"activityDescription"];
}
Но, похоже, все это не работает для меня. Любая помощь с благодарностью. Я чувствую, что это должно быть довольно легко, но я просто не могу этого понять.