2012-06-22 4 views
0

Mon application est de type SplitView et j'utilise UITableView pour afficher le nom des sites. Dans la méthode didSelectRowAtIndexPath, je me sers de ce qui suit les lignes de code ::Ajouter des données à NSDictionary

dateString = [formatter stringFromDate:[NSDate date]]; 
dict = [[NSDictionary alloc] init]; 
dict = [NSDictionary dictionaryWithObjectsAndKeys: urlString, dateString, nil]; 

[history addObject:dict]; 

NSLog(@"dateString: %@", dateString); //will let you know if it's nil or not 
NSLog(@"urlString : %@", [dict objectForKey:dateString]); 

NSString *docDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; 
NSLog(@"docDir is yoyo :: %@", docDir); 
NSString *spaceFilePath = [docDir stringByAppendingPathComponent:@"space.txt"]; 
[history writeToFile:spaceFilePath atomically: TRUE]; 

Je suis en train d'ajouter l'URL des sites visités alongwith l'horodatage dans le NSDictionary « dict ». J'ai initialisé le formateur dans la méthode viewDidLoad. L'historique est un tableau qui stocke la liste des dictionnaires.

J'ai utilisé les lignes de code suivantes dans viewDidLoad méthode:

formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

Je veux ajouter le nom du nouveau site visité dans le space.txt fichier déjà existant.

Toutefois, un seul nom apparaît (l'URL du dernier site visité). Comment puis-je ajouter les sitesNames récemment visités dans mon fichier space.txt déjà existant? Je suis incapable de résoudre ce problème.

Remerciements et salutations.

+0

Après avoir ajouté dict, imprimer l'historique et vérifier les valeurs? Et comme @Rajesh suggéré de vérifier si votre historique est nul ou non? –

Répondre

0

vous pouvez également utiliser votre code. Veuillez vérifier que vous avez alloué l'objet "history" dans viewDidLoad ou non. Si non, s'il vous plaît faites-le.

+0

bien oui .. lol .. allouer l'objet historique dans viewDidLoad travaillé aussi !! Merci beaucoup !! cette 1 seule ligne a fait le travail :: \t "history = [[NSMutableArray alloc] init];" – gamersoul

+0

mais pouvez-vous aussi me dire un peu de raisonnement pour l'allocation de cette mémoire ?? Je suis confondu avec la déclaration d'AliSoftware ci-dessous. – gamersoul

+0

Si vous n'allouez pas de mémoire pour un objet et que vous y ajoutez une valeur, cela signifie que le processeur va enregistrer la mémoire temporaire de données et que, à chaque fois que la portée est terminée, les données temporaires seront supprimées. Alors que vous ne pouvez pas utiliser ces détails hors de la portée sans allocation. Dans votre cas, chaque fois que les données que vous ajoutez sont enregistrées dans la mémoire temporaire et après la portée, il supprime les données ajoutées.De sorte que chaque fois qu'il enregistre seulement les données assignées prédéfinies. – Rajesh

0

Utilisez un NSMutableDictionary (et non un NSDictionary) pour avoir un dictionnaire qui est modifiable (= qui peut être modifié).


Addendum: Notez que votre ligne dict = [[NSDictionary alloc] init]; est totalement inutile, comme vous reaffect la variable "dict" dans la ligne suivante. C'est tout à fait comme si vous avez fait comme int a = 5; suivi par a=8, bien sûr la valeur qui était dans la variable avant est remplacée par la nouvelle, et la valeur précédente (votre [[NSDictionary alloc] init] dans votre cas) est perdue.

+0

kz .. J'ai aussi essayé d'utiliser NSMutableDictionary et j'ai supprimé la ligne pointée par vous. Le code ne fonctionne toujours pas, c'est-à-dire que seul le dernier site visité est en cours d'écriture dans le fichier space.txt: -/ – gamersoul

0

Vous créez l'objet ("dict") est différent pour chaque fois. Signifie simplement que vous ajoutez les détails sélectionnés dans le dictionnaire et que vous écrivez cela. Vous n'êtes donc pas en mesure de voir les détails enregistrés précédemment. Vérifiez le code suivant pour ajouter les sitesNames récemment visités dans mon fichier space.txt déjà existant.

dateString = [formatter stringFromDate:[NSDate date]]; 

NSString *docDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; 
NSString *spaceFilePath = [docDir stringByAppendingPathComponent:@"space.txt"]; 

if ([[NSFileManager defaultManager] fileExistsAtPath:spaceFilePath]) { 
    NSMutableDictionary *appendDict = [[NSMutableDictionary alloc] initWithContentsOfFile:spaceFilePath]; 
    [appendDict setObject:urlString forKey:dateString]; 
    [appendDict writeToFile:spaceFilePath atomically: TRUE]; 
    [appendDict release]; 
} else { 
    NSMutableDictionary *appendDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:urlString, dateString, nil]; 
    [appendDict writeToFile:spaceFilePath atomically: TRUE]; 
    [appendDict release]; 
} 

Je pense que cela peut être utile.

+0

oui .. cela a fonctionné !! Merci beaucoup :) :) – gamersoul

Questions connexes