无法在NSMutableDictionary中设置setObject:forKey:

5 iphone nsdictionary

我确定我在一个简单的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;
Run Code Online (Sandbox Code Playgroud)

当然,在实现文件中:

@implementation ClassList

@synthesize homedirectory;
@synthesize masterindexpath;
@synthesize classFilenameGlossary;
@synthesize listofclasses;
Run Code Online (Sandbox Code Playgroud)

我在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];
Run Code Online (Sandbox Code Playgroud)

}

后来,我使用setObject:forKey添加一个项目,但字典永远不会改变.最初我在另一个视图控制器中使用指向这个ClassList文件的指针执行此操作,但是一旦我发现它不起作用,我简化并尝试在ClassList文件中设置任何示例对象和键:

    [classFilenameGlossary setObject:@"sample filename" forKey:@"sample classname"];
Run Code Online (Sandbox Code Playgroud)

我查看了调试器变量列表,它显示了classFilenameGlossary被正确识别为具有0个键/值对的NSMutableDictionary.我没有得到任何错误; 字典根本不会改变.目前,从文件masterindexpath加载的字典是空的(因为我还没有能够添加任何项目),但这不应该使我无法将项目添加到字典中.

我是iPhone编程的初学者,所以我确信我缺少一些基本的东西.我很感激任何帮助.

Har*_*yer 8

这一行:

[classFilenameGlossary initWithContentsOfFile:masterindexpath];
Run Code Online (Sandbox Code Playgroud)

应该是这样的:

classFilenameGlossary = [[NSMutableDictionary alloc] initWithContentsOfFile:masterindexpath];
Run Code Online (Sandbox Code Playgroud)

你忘了为NSMutableDictionary分配内存,所以这就是它永远不会初始化的原因.