2017-04-07 1 views
3

Je m'excuse pour dupliquer Question. Je suis nouveau dans ios. Je veux stocker des objets personnalisés dans userdefaults. J'utilise l'objectif-c.comment peut stocker des objets personnalisés dans NSUserDefaults

Merci à l'avance

+3

double possible de [Comment stocker des objets personnalisés NSUserDefaults] (http://stackoverflow.com/questions/2315948/how-to-store-custom-objects-in-nsuserdefaults) – Rikh

+2

Copie possible de [Stocker les objets personnalisés dans NSUserDefaults] (http://stackoverflow.com/questions/43222681/store-custom-objects-in-nsuserdefaults) –

Répondre

2

D'abord vous créez classe personnalisée comme ci-dessous.

CustomObject.h

#import <Foundation/Foundation.h> 

@interface CustomObject : NSObject<NSCoding> 

@property(strong,nonatomic)NSString *name; 

@end 

CustomObject.m

#import "CustomObject.h" 

@implementation CustomObject 



- (void)encodeWithCoder:(NSCoder *)encoder { 
    //Encode properties, other class variables, etc 
    [encoder encodeObject:self.name forKey:@"name"]; 

} 

- (id)initWithCoder:(NSCoder *)decoder { 
    if((self = [super init])) { 
     //decode properties, other class vars 
     self.name = [decoder decodeObjectForKey:@"name"]; 

    } 
    return self; 
} 

Ensuite, créez objet de classe CustomObject et stocker dans NSUserDefaults

Stocké votre objet comme celui-ci

CustomObject *object =[CustomObject new]; 
object.name = @"test"; 

NSMutableArray *arr = [[NSMutableArray alloc]init]; 
[arr addObject:object]; 

NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:arr]; 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:encodedObject forKey:@"storeObject"]; 
[defaults synchronize]; 

obtenir objet personnalisé de NSUserDefaults comme celui-ci

NSData *storedEncodedObject = [defaults objectForKey:@"storeObject"]; 
     NSArray *arrStoreObject = [NSKeyedUnarchiver unarchiveObjectWithData:storedEncodedObject]; 
     for (int i=0; i<arrStoreObject.count; i++) 
     { 
      CustomObject *storedObject = [arrStoreObject objectAtIndex:i]; 
      NSLog(@"%@",storedObject.name); 

     } 
+1

Cela ne fonctionnera pas à moins que votre classe implémente le protocole

+0

Pl facilité ne pas ajouter la [même réponse à plusieurs questions] (http://meta.stackexchange.com/questions/104227/is-it-acceptable-to-ad??da-duplicate-answer-to-several-questions). Répondez le meilleur et marquez le reste comme doublons, une fois que vous gagnez assez de réputation. Si ce n'est pas un doublon, adaptez le message à la question. [Dupliquer Answere ici] (https://stackoverflow.com/questions/43222681/store-custom-objects-in-nsuserdefaults/43223489#43223489) –

0

Swift 3

 // set a value for key 
     let encodedData = NSKeyedArchiver.archivedData(withRootObject: #YOUR OBJECT#) 
     UserDefaults.standard.set(encodedData, forKey: #YOUR KEY#) 

     // retrieving a value for a key 
     if let data = UserDefaults.standard.data(forKey: #YOUR KEY#), 
      let obj = NSKeyedUnarchiver.unarchiveObject(with: data) as? #YOUR OBJECT# { 
     } else { 
      print("There is an issue") 
     } 
+1

même approche et une bien meilleure explication est ici: https://stackoverflow.com/a/29987303/5881884 – DevB2F