2014-05-24 1 views
1

Je souhaite créer un utilisateur qui récupère l'application à partir du disque chaque fois que l'application est ouverte et écrit chaque fois qu'elle est fermée. Je veux que les données de l'utilisateur, telles que le nom NSString, ainsi que d'autres variables, soient accessibles depuis n'importe quel autre point de l'application.Enregistrer un profil utilisateur dans l'application iOS pour qu'il soit toujours accessible

Il n'y aura qu'un seul utilisateur, c'est donc une sorte de variable "globale". En outre, si la classe d'utilisateurs inclut des pointeurs vers des structures de données telles que NSMutableDictionary ou une autre instance de NSObject, y a-t-il des précautions à prendre?

Je veux apprendre la meilleure façon de mettre en œuvre ceci, des suggestions?

Répondre

1

1) Créer une classe pour représenter votre utilisateur

2) Avoir cette classe de mettre en œuvre le protocole NSCoding

3) Utilisez NSFileManager pour créer ou ouvrir un fichier si nécessaire

4) L'utilisation que fichier à restaurer/stocker la classe d'utilisateur. (Il est facile d'utiliser le protocole NSCoding)

5) Faire la classe d'utilisateur appartenant à votre modèle qui expose les données dans la classe d'utilisateurs, ou faire de la classe d'utilisateur un singleton (Le premier est beaucoup mieux).

Vous devriez être en mesure de trouver des exemples/tutoriels si vous recherchez comment stocker des choses en utilisant NSCoding

+0

Pouvez-vous expliquer comment je fais que la classe d'utilisateurs appartient au modèle? Je suis confus quant à ce que serait le modèle qui expose des données – shane

+0

Recherche le modèle MVC (contrôleur de vue de modèle) – Gruntcakes

+0

Bon alors mon contrôleur de vue a un objet utilisateur, et je charge mon utilisateur à partir du fichier dans le délégué de l'application sur le lancement ou terminer , comment puis-je passer mon utilisateur du délégué à mon contrôleur de vue (ou plusieurs), ou est-ce que je les regroupe tous dans un contrôleur de navigation et que j'attribue mon utilisateur à cela? – shane

0

NSUserDefaults est votre ami. Il répond à vos exigences pour être accessible à partir de tout autre point de l'application.

+0

Personnellement, je n'utiliserais pas NSUserDefaults si les données contiennent des structures de données dynamiques, ce qui est le cas. – Gruntcakes

+0

@Piepants expliquerez-vous, pourquoi NSUserDefaults n'est pas une bonne option pour stocker du contenu dynamique. – Pawan

0

Vous pouvez créer un UserObject prolongé par NSObject. Utilisez un Singleton Pattern afin que vous ayez toujours le même objet dans chaque classe.

Ensuite, vous pouvez simplement enregistrer chaque variable à l'intérieur NSUserDefaults en utilisant un key spécifique. Si vous souhaitez enregistrer le tout objet à l'intérieur NSUserDefaults vous devez inclure les NSCoding dans l'interface

@interfaces User : NSObject <NSCoding> 

et utiliser les méthodes initWithCode: et encodeWithCoder:

- (id)initWithCoder:(NSCoder *)aDecoder{ 
    self = [super init]; 
    if(self){ 
     strName = [aDecoder decodeObjectForKey:@"name"]; 
    } 
    return self; 
} 

- (void)encodeWithCoder:(NSCoder *)aCoder{ 
    [aCoder encodeObject:strName forKey:@"name"]; 
} 

pour un/archivage faire de cette façon :

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:userObject]; 

UserObject *user = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

si vous voulez un peu plus d'informations que vous can read all about it here.

0

Utilisez le trousseau dans le cas où des données utilisateur privées sont stockées. Dans la plupart des cas, la réponse de Martin est la meilleure.

0

NSUserDefaults est une excellente option. Vous pouvez y accéder à partir de chaque point de votre application, enregistrer et extraire des données à tout moment et stocker la plupart des choses dont vous aurez probablement besoin.

Pour enregistrer:

NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults]; 
[userDef setObject:userDictionary forKey:@"userData"]; 
[userDef synchronize]; 

Pour extraire:

NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults]; 
NSDictionary *userDictionary = [userDef objectForKey:@"userData"]; 

Vous pouvez sauvegarder vos données sur votre

de AppDelegate
- (void)applicationWillTerminate:(UIApplication *)application; 

et extrait sur:

- (void)applicationWillEnterForeground:(UIApplication *)application; 
Questions connexes