2010-12-03 26 views
1

J'ai un singleton qui a un NSArray créé lorsque la première instance du singleton est. Quand dois-je sauvegarder ce tableau sur le disque, dans la méthode dealloc? J'ai vérifié les docs d'Apple et son dit que vous ne devriez vraiment pas dans dealloc mais ne parvient pas à dire où. Je suis donc censé écrire sur le disque chaque fois que le tableau est modifié? Cela semble être un gâchis?Enregistrement d'un tableau sur un disque dans un singleton

Répondre

3

En général, vous devriez sauvegarder l'état près du moment où cet état a été changé. Si la quantité d'état que vous enregistrez est très faible, vous pouvez attendre que l'application delegate -applicationWillResignActive: method soit appelée. Ou vous pourriez avoir un registre singleton avec NSNotificationCenter pour observer UIApplicationWillResignActiveNotification. Et puis enregistrer.

Si votre baie est très grande, vous pouvez enregistrer moins fréquemment. Mais vous devez également être conscient du temps qu'il faudra pour écrire votre tableau sur le disque. Selon les circonstances dans lesquelles votre application se résout comme active, vous pouvez ne pas avoir beaucoup de temps pour écrire sur le disque.

Avez-vous une idée précise de la quantité maximale de données à écrire? Est-ce limité ou est-il ouvert?

+0

Chaque fois que l'utilisateur réorganise les cellules d'une tableView (et il y a en fait 2 NSArrays) les tableaux du singleton sont mis à jour pour correspondre, l'utilisateur est susceptible de réordonner plus d'une rangée à la fois, mais il sera appelé chaque ligne déplacée, donc je ne veux pas que l'utilisateur déplace une rangée, l'application sauvegarde sur le disque, l'utilisateur déplace une autre ligne une milliseconde plus tard et doit enregistrer à nouveau sur le disque, etc. –

+0

Y at-il une notion de l'utilisateur commettant récemment changements, comme un bouton "Terminé"? D'ailleurs, existe-t-il un «Annuler» qui annulerait les changements récents? – westsider

+0

Comment aurais-je pu oublier ça? Pourquoi ai-je posé la question :) –