Comment archiver un NSArray d'objets personnalisés dans le fichier en Objective-C
-
28-09-2019 - |
Question
Pouvez-vous me montrer la syntaxe ou des exemples de programmes pour archiver un NSArray d'objets personnalisés en Objective-C?
La solution
Consultez NSUserDefaults .
Pour l'archivage de votre tableau, vous pouvez utiliser le code suivant:
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:myArray] forKey:@"mySavedArray"];
Et puis pour le chargement des objets personnalisés dans le tableau, vous pouvez utiliser ce code:
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *savedArray = [currentDefaults objectForKey:@"mySavedArray"];
if (savedArray != nil)
{
NSArray *oldArray = [NSKeyedUnarchiver unarchiveObjectWithData:savedArray];
if (oldArray != nil) {
customObjectArray = [[NSMutableArray alloc] initWithArray:oldSavedArray];
} else {
customObjectArray = [[NSMutableArray alloc] init];
}
}
Assurez-vous de vérifier que les données renvoyées par les paramètres utilisateur par défaut ne sont pas nil
, car cela peut se bloquer votre application.
L'autre chose que vous devez faire est de rendre votre objet personnalisé de se conformer au protocole NSCoder
. Vous pouvez le faire en utilisant les méthodes de -(void)encodeWithCoder:(NSCoder *)coder
et -(id)initWithCoder:(NSCoder *)coder
.
Autres conseils
Si vous souhaitez enregistrer dans un fichier (plutôt que d'utiliser NSUserDefaults), vous pouvez utiliser -initWithContentsOfFile:
à la charge, et -writeToFile:atomically:
pour sauver, en utilisant NSArrays.
Exemple:
- (NSArray *)loadMyArray
{
NSArray *arr = [NSArray arrayWithContentsOfFile:
[NSString stringWithFormat:@"%@/myArrayFile", NSHomeDirectory()]];
return arr;
}
// returns success flag
- (BOOL)saveMyArray:(NSArray *)myArray
{
BOOL success = [myArray writeToFile:
[NSString stringWithFormat:@"%@/myArrayFile", NSHomeDirectory()]];
return success;
}
Il y a beaucoup d'exemples sur les différentes façons de le faire ici: http: // www .cocoacast.com /? q = node / 167