Question

J'ai besoin de sauver un NSMutablectionary dans NSUSERDEFAULTS. J'ai recherché le Web pour de nombreux exemples, mais je n'en ai pas reçu qui sont suffisamment pertinents. Quelqu'un peut-il publier un petit morceau de code qui sauvera un NSMutablectionary dans NSUSERDEFAULTS lors de l'arrêt et le récupérera au lancement de l'application? Pourriez-vous également me dire où placer le code.

J'ai moi-même du code, mais cela ne fonctionne pas.

appdelegate.h - récupération des données

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.

      NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
      NSData *dat = [defaults objectForKey:@"theKey"];
      tmpArray  = [[NSMutableArray alloc] init];
      tmpArray = [NSKeyedUnarchiver unarchiveObjectWithData:dat];

      [self.window makeKeyAndVisible];
      [window addSubview:tabBarController.view];
      return YES;
}

appdelegate.h - stockage des données

- (void)applicationWillTerminate:(UIApplication *)application {

      [self saveContext];
      NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
      NSData *dat = [NSKeyedArchiver archivedDataWithRootObject:tmpArray];
      [defaults setObject:dat forKey:@"theKey"];
}

Oui, c'est pour un tableau, mais j'en aurai besoin pour un NSMutablectionary.

Était-ce utile?

La solution

La discussion de Application Willterminiate:

Pour les applications qui ne prennent pas en charge l'exécution d'arrière-plan ou qui sont liées à iOS 3.x ou antérieures, cette méthode est toujours appelée lorsque l'utilisateur quitte l'application. Pour les applications qui prennent en charge l'exécution d'arrière-plan, cette méthode n'est généralement pas appelée lorsque l'utilisateur quitte l'application car l'application passe simplement à l'arrière-plan dans ce cas. Cependant, cette méthode peut être appelée dans des situations où l'application s'exécute en arrière-plan (non suspendu) et le système doit le terminer pour une raison quelconque.

Pour enregistrer votre objet, vous devez mettre votre code dans ApplicationDidenerBackground: aussi.

Dans iOS 4.0 et ultérieurement, cette méthode est appelée à la place de l'applicationwillterniate: Méthode Lorsque l'utilisateur quitte une application qui prend en charge l'exécution d'arrière-plan. Vous devez utiliser cette méthode pour publier des ressources partagées, enregistrer des données utilisateur, invalider les minuteries et stocker suffisamment d'informations sur l'état d'application pour restaurer votre application à son état actuel au cas où il serait terminé plus tard. Vous devez également désactiver les mises à jour de l'interface utilisateur de votre application et éviter d'utiliser certains types de ressources système partagées (telles que la base de données des contacts de l'utilisateur). Il est également impératif d'éviter d'utiliser des ouvertures en arrière-plan.


Pour enregistrer un dictionnaire au lieu d'un tableau, remplacez simplement toutes les occurrences de tableau par le dictionnaire


Et réparer la fuite

tmpArray  = [[NSMutableArray alloc] init]; // not used, not released but `alloc`ed.
tmpArray = [NSKeyedUnarchiver unarchiveObjectWithData:dat];

En supprimant la première ligne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top