Iphone 无法在NSMutableDictionary中设置对象:forKey:

Iphone 无法在NSMutableDictionary中设置对象:forKey:,iphone,nsdictionary,Iphone,Nsdictionary,我确信我在试图编写的一个简单的iPhone程序中遗漏了一些明显的东西,但代码似乎太基本了,我看不出哪里出了问题 我正在尝试使用NSMutableDictionary来存储类列表及其关联的保存文件名。在头文件中,我声明了字典 @interface ClassList : UITableViewController { NSString *homedirectory; NSString *masterindexpath; NSMutableDictionary *classFilenameGloss

我确信我在试图编写的一个简单的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:添加了一个项,但字典从未更改。最初,我在另一个视图控制器中使用指向该类列表文件的指针执行此操作,但当我发现此操作不起作用时,我简化并尝试在类列表文件中设置任何示例对象和键:

    [classFilenameGlossary setObject:@"sample filename" forKey:@"sample classname"];
我已经查看了调试器变量列表,它显示了classFilenameGlossary,它正确地标识为具有0个键/值对的NSMutableDictionary。我没有犯任何错误;这本字典永远不会变。目前,从masterindexpath文件加载的字典是空的(因为我还不能添加任何项),但这不应该阻止我向字典添加项

我是一个iPhone编程的初学者,所以我确信我缺少一些基本的东西。非常感谢您的帮助。

这句话:

[classFilenameGlossary initWithContentsOfFile:masterindexpath];
应该是这样的:

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

您忘了为NSMutableDictionary分配内存,因此它从未初始化。

谢谢,这很有效!这个问题我已经解决了两天了。我认为在头文件的@interface部分声明NSMutableDictionary*classFilenameGlossary会使alloc变得不必要,但显然不是。@Dan:Nope。这只是为指向NSMutableDictionary的指针分配了空间,而不是为字典本身分配了空间。我知道现在发布这篇文章已经晚了,但对于未来的Google用户,您也可以只使用[NSMutableDictionary dictionaryWithContentsOfFile:]它会自动分配和初始化。@SphereCat1:它也会自动删除。@SphereCat1:将其作为答案发布-大多数时候,我不会阅读注释。