Невозможно установить setObject: forKey: в NSMutableDictionary - PullRequest
5 голосов
/ 21 мая 2009

Я уверен, что мне не хватает чего-то очевидного в простой программе для iPhone, которую я пытаюсь написать, но код кажется настолько простым, что я не вижу, в чем дело.

Я пытаюсь использовать NSMutableDictionary для хранения списка классов и связанных с ними имен файлов сохранения. В заголовочном файле я объявляю словарь

@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;

И, конечно же, в файле реализации:

@implementation ClassList

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

Я инициализирую этот словарь в ViewDidLoad из существующего файла, который сохраняет список классов:

- (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];

}

Позже я добавляю элемент, используя setObject: forKey:, но словарь никогда не меняется. Первоначально я делал это в другом контроллере представления, используя указатель на этот файл ClassList, но как только я обнаружил, что это не работает, я упростил и попытался просто установить любой образец объекта и ключа в файле ClassList:

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

Я посмотрел список переменных отладчика, и он показывает classFilenameGlossary, правильно идентифицированный как NSMutableDictionary с 0 парами ключ / значение. Я не получаю никакой ошибки; словарь просто никогда не меняется. На данный момент словарь, загруженный из файла masterindexpath, пуст (поскольку я пока не смог добавить ни одного элемента), но это не должно помешать мне добавить элементы в словарь.

Я абсолютный новичок в программировании для iPhone, поэтому я уверен, что мне чего-то не хватает. Буду признателен за любую помощь.

1 Ответ

8 голосов
/ 21 мая 2009

Эта строка:

[classFilenameGlossary initWithContentsOfFile:masterindexpath];

должно выглядеть так:

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

Вы забыли выделить память для NSMutableDictionary, поэтому он никогда не инициализируется.

...