2009-07-17 7 views
0

J'ai une application qui doit se connecter et recevoir des données, différente chaque fois que vous cliquez dans un onglet. Ensuite pour montrer les données à l'utilisateur, j'utilise un "element.plist" où j'ai un tableau de dictionnaires (chaque dictionnaire a l'information dans différentes chaînes: nom, catégorie, ...). Je charge l'info de ce plist. Je souhaiterais alors, continuer à utiliser la même structure. Chaque fois que je reçois les données de connexion:Plistes et connexions

  1. supprimer le contenu de la plist
  2. enregistrer le nouveau contenu (je peux le faire dans la méthode d'analyse syntaxique, chaque fois que j'ai un objet avec toutes les informations)
  3. Lisez l'info comme je fais maintenant.

L'étape que je ne peux pas faire est la seconde.

grâce

Répondre

0

Je ne suis pas sûr que je comprends parfaitement votre question, mais je vais essayer d'aider. Voici un exemple de code d'apple qui sauve un plist lorsqu'une application est en train de quitter.

la deuxième ligne définit le nom du fichier plist:

NSString * bundlePath = le répertoire de l'application + « données »

la troisième ligne définit un dictionnaire avec toutes les données à économiser:

NSDictionary * plistDict

la quatrième ligne formate ce dictionnaire comme liste des propriétés données:

NSData * PlistData

qui est ensuite enregistré en tant que Data.plist

- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender 
{ 
    NSString *errorDesc; 
    NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"]; 

    NSDictionary *plistDict = [NSDictionary dictionaryWithObjects: 
      [NSArray arrayWithObjects: personName, phoneNumbers, nil] 
      forKeys:[NSArray arrayWithObjects: @"Name", @"Phones", nil]]; 
    NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:plistDict 
      format:NSPropertyListXMLFormat_v1_0 
      errorDescription:&errorDesc]; 
    if (plistData) 
    { 
     [plistData writeToFile:bundlePath atomically:YES]; 
    } 
    else { 
     NSLog(errorDesc); 
     [errorDesc release]; 
    } 
    return NSTerminateNow; 
} 

Vous pouvez trouver cette information dans le guide de programmation de la liste des biens

+0

Je crée un dictionnaire de type plist (essayez également avec type array) nommé Data.plist. J'ai exécuté ce code (en ajoutant les objets personName et phoneNumbers) et mon plist reste vide. –

+0

ce modèle de code a fonctionné pour moi. peut-être vous pourriez commencer par essayer des chaînes prédéfinies dans le tableau de valeurs: NSDictionary * plistDict = [NSDictionary dictionaryWithObjects: [NSArray arrayWithObjects: @ "ANAME", @ "aNumber", nul] forKeys: [NSArray arrayWithObjects: @ "Nom", @ "Téléphones", néant]]; NSData * plistData = [NSPropertyListSerialization dataFromPropertyList: plistDict format: NSPropertyListXMLFormat_v1_0 errorDescription: & errorDesc]; pour vous assurer que le problème est non avec les valeurs que vous transmettez? –

0

Mey,

Je ne suis pas sûr que je comprends votre déclaration au sujet d'avoir une plist vide. Je suppose que vous voulez dire que si vous relisez le fichier plist que vous avez créé, il est nul lorsque vous l'imprimez. Suggérant que vous êtes en train d'écrire un fichier vide ou ne pas lire correctement ou ...

Je suppose en outre que votre intention est de remplacer le contenu de plist existant par un nouveau plist tout en gardant le même nom.

Et caveat emptor - Je suis nouveau à l'objectif C etc. Voici une façon de faire ce que je pense que vous essayez de faire.

// Implement viewDidLoad to do additional setup after loading the view, 
// typically from a nib. 
- (void)viewDidLoad { 
    NSBundle *bundle = [NSBundle mainBundle]; 
    NSString *plistPath = [bundle pathForResource:@"TmpPList" ofType:@"plist"]; //Not NARC 
    //NSLog(@"plistPath : %@", plistPath); 
    //My plist is a simple array, but it could be an array of dictionary objects etc 
    NSMutableArray *arrayFromPList = [[NSMutableArray alloc] initWithContentsOfFile:plistPath]; //NARC 
    //NSLog(@"arrayFromPList : %@", arrayFromPList); 
    //Delete the arrays contents and put new contents 
    [arrayFromPList removeAllObjects]; 
    //NSLog(@"arrayFromPList : %@", arrayFromPList); 
    //[arrayFromPList addObjectsFromArray:[NSArray arrayWithObjects:@"A", @"B", "@C", nil]]; 
    //NSLog(@"arrayFromPList : %@", arrayFromPList); 
    [arrayFromPList setArray:[NSMutableArray arrayWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", nil]]; 
    //NSLog(@"arrayFromPList : %@", arrayFromPList); 
    /* */ 
    //Write it out to the original file name 
    [arrayFromPList writeToFile:plistPath atomically:YES]; 
    NSMutableArray *newArray = [[NSMutableArray alloc] initWithContentsOfFile:plistPath]; //NARC 
    NSLog(@"newArray : %@", newArray); 
    [arrayFromPList release]; 
    [newArray release];  
} 
Questions connexes