iPhone: сохранение и извлечение объекта NSMutableArray

#objective-c #ios

#objective-c #iOS

Вопрос:

 appDelegate.categoryData = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                         categoryStr, @"name",image ,@"image", nil];

[appDelegate.categories addObject:appDelegate.categoryData];
NSLog(@"Category Data:--->%@",appDelegate.categories);
  

Я успешно добавил объект mutabledictionary в mutuablearray, но я хочу сохранить этот массив и извлекать его при запуске приложения, поэтому, пожалуйста, дайте мне идею для разработки этой функциональности.

Заранее спасибо.

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

1. если вы хотите, чтобы этот массив был постоянным, это невозможно, потому что этот массив инициализируется при запуске приложения.. Решение заключается в том, чтобы сохранить его в UserDefaults, после чего вы получите его в любое время в любом месте вашего приложения, пока не сбросите свое приложение

2. итак, пожалуйста, скажите мне, как я могу использовать NSUserDefaults для хранения и извлечения массива

3. я добавляю код ниже, попробуйте использовать тот, который вы можете получить

Ответ №1:

     //you can save array in NSUserDefaults like below
    if ([[NSUserDefaults standardUserDefaults] valueForKey:@"detail"]==nil)
    {
        NSMutableDictionary *dic_detail = [NSMutableDictionary dictionaryWithObjectsAndKeys:
             categoryStr, @"name",image ,@"image", nil];
            NSMutableArray *ary_detail = [[NSMutableArray alloc] init];
            [ary_detail addObject:dic_detail];
            [[NSUserDefaults standardUserDefaults] setObject:ary_detail forKey:@"detail"];
            [[NSUserDefaults standardUserDefaults] synchronize];
     }

            //if you want read that array you can read like below in your app  
            NSMutableArray *array = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"detail"]];

    - (void)applicationDidEnterBackground:(UIApplication *)application {
        NSLog(@"applicationDidEnterBackground = %@",[[NSUserDefaults standardUserDefaults] objectForKey:@"detail"]);
    }

    - (void)applicationWillEnterForeground:(UIApplication *)application {
        NSLog(@"applicationWillEnterForeground = %@",[[NSUserDefaults standardUserDefaults] objectForKey:@"detail"]);
    }
in my log its printing like this 

    applicationDidEnterBackground = (
            {
            image = img1;
            name = cat1;
        }
    applicationWillEnterForeground = (
            {
            image = img1;
            name = cat1;
        }
  

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

1. где я могу получить массив хранилища после выхода из моего приложения и снова запустить с отображаемыми категориями, которые хранятся в массиве

2. большое спасибо за сохранение массива, но я не могу получить этот массив после выхода из приложения

3. в методе viewDidLoad RootViewController для извлечения этого массива, но массив не отображается в tableview

4. Я инициализирую свой AppDelegate.categories в AppDelegate, поэтому любая проблема с извлечением этого массива, пожалуйста, сообщите мне

Ответ №2:

Возможно, что-то вроде этого:

 NSMutableArray * array = [NSMutableArray array];

appDelegate.categoryData = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                         categoryStr, @"name",
                                         image ,@"image", 
                                         array, @"array", nil];
  

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

1. Можете ли вы быть более конкретным? Вы имеете в виду, что хотите записать массив в файл?

2. Хорошо, я просто сохраняю объект AppDelegate.categories amp; и выхожу из приложения, и после этого сохраненная категория отображается в tableview

Ответ №3:

Что-то вроде:

При запуске приложения:

 [[NSUserDefaults standardUserDefaults] registerDefaults:
   [NSDictionary dictionaryWithObjectsAndKeys:
      [NSArray new], @"StoredArray", nil]];
  

В вашем классе, который «владеет» управлением массивом:

 - (void)setArray:(NSMutableArray *)array {
    [[NSUserDefaults standardUserDefaults] setObject:array forKey:@"StoredArray"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

- (NSArray*)array {
    return [[[NSUserDefaults standardUserDefaults] arrayForKey:@"StoredArray"] mutableCopy];
}
  

Надеюсь, это поможет!