2010-11-04 26 views
0

J'ai un NSMutableArray, chaque élément de ce tableau est de classe différente. Dans chaque classe a de nombreux champs tels que CPPlot, identifiant, ... (j'utilise CorePlot pour développer une application de stock). Maintenant, je voudrais stocker ce NSMutableArray à charger lorsque l'utilisateur rouvrir l'application, cela va charger tout le graphique qu'ils ont utilisé auparavant. Je tente de comprendre comment faire cela dans Stackoverflow. Et j'ai découvert il y avait 2 solutions:Enregistrer NSMutableArray à charger lors de la réouverture de l'application iPhone

NSUserDefaults

base de données SQLite

  1. En NSUserDefaults, quand je veux stocker NSMutableArray, je dois mettre en œuvre avec NSKeyedArchiver pour archiver et objet tableau décompressez, également faire le protocole NSCoding pour chaque élément de l'objet tableau. Mais je ne peux pas faire cette solution parce que dans chaque article, il a quelques champs de la bibliothèque de CorePlot, ainsi je ne peux pas employer le NSCoding à ces champs.

  2. Base de données SQLite, je ne peux pas utiliser cette solution car chaque élément de l'objet tableau est de classe différente.

Je voudrais demander si une autre solution pour résoudre ce problème? J'espère que mes mots sont suffisamment clairs pour comprendre.

Merci

Répondre

0

Je vous suggère de savoir quel genre de données est à la racine de vos objets CorePlot. S'il s'agit d'entiers, stockez-les simplement dans NSUserDefaults, puis reconstruisez simplement NSMutableArray à la réouverture de l'application. Une autre option consiste à stocker vos éléments dans un fichier plist distinct.

0

Utilisez cette méthode pour enregistrer:

- (NSArray *)applicationDataFromFile:(NSString *)fileName { 
    NSArray *paths = NSSearchPathForDirecotiresInDomains(NSDocumentDirectory, 
                 NSUserDomainMask, 
                 YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *appFile = [documentsDirectory 
         stringByAppendingPathComponent:fileName]; 
    NSArray *myData = [NSArray arrayWithContentsOfFile:appFile]; 
    return myData; 
} 

- (BOOL)saveToFileForStringArray:(NSMutableArray *)array 
          toFile:(NSString *)fileName { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                 NSUserDomainMask, 
                 YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    if (!documentsDirectory) { 
     NSLog(@"Documents directory not found!"); 
     return NO; 
    } 
    NSString *appFile = [documentsDirectory 
         stringByAppendingPathComponent:fileName]; 
    return ([array writeToFile:appFile atomically:YES]); 
} 
+0

reformatez cette réponse afin que le code est possible d'être lu ... – Jason

+0

@ Jason Oui, bien sûr –