Невозможно установитьObject:forKey:в NSMutableDictionary

StackOverflow https://stackoverflow.com/questions/893422

  •  23-08-2019
  •  | 
  •  

Вопрос

Я уверен, что мне не хватает чего-то очевидного в простой программе для 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, поэтому уверен, что мне не хватает чего-то базового.Я был бы признателен за любую помощь.

Нет правильного решения

Другие советы

Эта строка:

[classFilenameGlossary initWithContentsOfFile:masterindexpath];

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top