Question

Je suis sûr que je manque quelque chose évidente ici dans un programme simple de l'iPhone, je suis en train d'écrire, mais le code semble si fondamental que je ne vois pas ce qui ne va pas.

Je suis en train d'utiliser un NSMutableDictionary pour stocker une liste des classes et leurs noms de fichiers associés sauver. Dans le fichier d'en-tête, je déclare le dictionnaire

@interface ClassList : UITableViewController {
NSString *homedirectory;
NSString *masterindexpath;
NSMutableDictionary *classFilenameGlossary;
NSMutableArray *listofclasses;
}

@property (retain, nonatomic) NSString *homedirectory;
@property (retain, nonatomic) NSString *masterindexpath;
@property (retain, nonatomic) NSMutableDictionary *classFilenameGlossary;
@property (retain, nonatomic) NSMutableArray *listofclasses;

Et, bien sûr, dans le fichier de mise en œuvre:

@implementation ClassList

@synthesize homedirectory;
@synthesize masterindexpath;
@synthesize classFilenameGlossary;
@synthesize listofclasses;

J'initialiser ce dictionnaire à viewDidLoad à partir d'un fichier existant qui sauve la liste des élèves:

- (void)viewDidLoad {
[super viewDidLoad];

// Get home directory

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
homedirectory = [paths objectAtIndex:0];
masterindexpath = [homedirectory stringByAppendingPathComponent:@"MasterIndex"];

// Get master course list or create it if necessary

NSFileManager *fm = [NSFileManager defaultManager];
if ([fm fileExistsAtPath:masterindexpath] == NO)
{
    NSMutableDictionary *temporarydictionary = [NSMutableDictionary dictionary];
    [temporarydictionary writeToFile:masterindexpath atomically:NO];
    [temporarydictionary release];
}

[classFilenameGlossary initWithContentsOfFile:masterindexpath];

[homedirectory retain];
[masterindexpath retain];

}

Plus tard, j'ajouter un article à l'aide setObject: forKey: mais le dictionnaire ne change jamais. Au départ, je faisais cela dans un autre contrôleur de vue à l'aide d'un pointeur sur ce fichier classList, mais une fois que j'ai découvert qui ne fonctionne pas, j'ai simplifié et essayé de simplement mettre un objet d'échantillonnage et la clé dans le fichier classList:

    [classFilenameGlossary setObject:@"sample filename" forKey:@"sample classname"];

Je l'ai regardé la liste des variables débogueur et il montre classFilenameGlossary correctement identifié comme un NSMutableDictionary avec 0 paires clé / valeur. Je ne reçois pas une sorte d'erreur; le dictionnaire change tout simplement jamais. Pour le moment, le dictionnaire chargé à partir du fichier masterindexpath est vide (puisque je ne l'ai pas été en mesure d'ajouter des éléments encore), mais cela ne devrait pas me empêcher d'être en mesure d'ajouter des éléments au dictionnaire.

Je suis un débutant à la programmation iPhone, donc je suis sûr qu'il ya quelque chose de base que je suis absent. Je vous remercie de toute aide.

Pas de solution correcte

Autres conseils

Cette ligne:

[classFilenameGlossary initWithContentsOfFile:masterindexpath];

devrait ressembler à ceci:

classFilenameGlossary = [[NSMutableDictionary alloc] initWithContentsOfFile:masterindexpath];

Vous avez oublié d'allouer de la mémoire pour le NSMutableDictionary, c'est pourquoi initialisées jamais.

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