Простое сохранение / загрузка всего массива

#iphone #xcode3.2

#iPhone #xcode3.2

Вопрос:

Я новичок. Пытался сохранить / загрузить пару массивов, но безрезультатно. У меня есть «Global.h» и «Global.m», предоставляющие массивы для других классов.

в Global.h

 extern NSMutableArray *arrayTable;
extern NSMutableArray *arrayPurpose;
@interface Global : NSObject <NSCoding> {
}
  

в Global.m

 NSMutable *arrayTable;
MSMutable *arrayPurpose;
  

У меня есть другие представления / контроллеры / классы / что угодно, что работает с этими массивами, и они функционируют. Что мне поместить внутрь этого «Глобального» и «AppDelegate.h» и «AppDelegate.m», чтобы эти массивы сохранялись, когда это приложение переходит в фоновый режим и загружается при запуске приложения? Мне нужно использовать этот «NSDocumentDirectory», потому что эти данные важны.

Пожалуйста, сделайте ваши объяснения ДЕЙСТВИТЕЛЬНО ПРОСТЫМИ. У меня меньше недели опыта. Спасибо!!

Редактировать: Сделал то, что предложил Джорис. Добавлено это в AppDelegate

 -(NSString *)archivePath {
NSString *docDir =
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)objectAtIndex: 0];
return [docDir stringByAppendingPathComponent:@"TableData.dat"];
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
[NSKeyedArchiver archiveRootObject:arrayTable toFile:self.archivePath];
    [NSKeyedArchiver archiveRootObject:arrayPurpose toFile:self.archivePath];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
[window addSubview:rootController.view];
[self.window makeKeyAndVisible];

arrayTable = [NSKeyedUnarchiver unarchiveObjectWithFile:[self archivePath]];
arrayPurpose = [NSKeyedUnarchiver unarchiveObjectWithFile:[self archivePath]];
if (arrayTable == nil) {
    arrayPurpose = [[NSMutableArray alloc]init];
    arrayTable = [[NSMutableArray alloc]init];
}
return YES;
  

}

Ответ №1:

Не очень подробно, но:

в методе приостановки вашего appdelegate вы можете использовать:

 [NSKeyedArchiver archiveRootObject:arrayTable toFile:...];
  

и в методе возобновления:

 arrayTable = [[NSKeyedUnarchiver unarchiveObjectWithFile:...] retain];
  

Комментарии:

1. Можете ли вы показать мне все это целиком? О том, как это делается? Я уже несколько дней пытаюсь использовать эти NSKeyedArchiver и NSKeyedUnarchiver и собираюсь выбросить свой Mac из окна.

2. Все это? Не хватает только: точных имен методов в вашем AppDelegate, но они должны быть простыми, и генерации пути к выходному файлу

3. Сделал то, что вы предложили. Объявлен «archivePath» для использования. Затем следуют NSKeyedArchiver и Unarchiver. По-прежнему не работает. Есть идеи, почему? О, и почему разархиватор запрещает мне добавлять . между self и archivepath? Это не позволит мне создавать.

4. вы забыли сохранить массивы после их разархивирования