Question

Pouvez-vous me montrer la syntaxe ou des exemples de programmes pour archiver un NSArray d'objets personnalisés en Objective-C?

Était-ce utile?

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

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