2009-05-21 12 views
5

私は簡単なiPhoneプログラムでここに明白なものがないと確信していますが、コードはとても基本的なもので、何が間違っているのか分かりません。NSMutableDictionaryのObject:forKey:を設定することができません

NSMutableDictionaryを使用してクラスのリストと関連する保存ファイル名を保存しようとしています。

@implementation ClassList 

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

私はCLASSLISTを保存し、既存のファイルからのviewDidLoadでこの辞書を初期化:ヘッダファイルでは、私は辞書

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

そして、もちろん、実装ファイルで宣言します

- (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:しかし、t彼は辞書が決して変わらない。もともと私は、このClassListファイルに戻ってポインタを使用して別のビューコントローラでこれを行っていましたが、私はそれが動作しないことを発見した後、単純化し、ClassListファイル内の任意のサンプルオブジェクトとキーを設定しようとしました:

私はデバッガの変数リストを見て、classFilenameGlossaryがNSMutableDictionaryとして正しく識別され、キーと値のペアが0であることを示しています。私はどんなエラーも受けていません。辞書は決して変化しません。現時点では、masterindexpathファイルから読み込まれた辞書は空です(私はまだ項目を追加できませんでした)ので、辞書に項目を追加できないようにしてはいけません。

私はiPhoneプログラミングでは初心者ですから、私には欠けている基本があります。私はどんな助けにも感謝しています。

答えて

8

このライン:

[classFilenameGlossary initWithContentsOfFile:masterindexpath]; 

は次のようになります。

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

をあなたはNSMutableDictionaryのためにメモリを割り当てるのを忘れて、それが初期化されたことがない理由です。

+0

ありがとうございます!私は2日間その問題に立ち往生してきました。ヘッダファイルの@interfaceセクションにNSMutableDictionary * classFilenameGlossaryを宣言すると、allocは不要になりましたが、明らかにそうではありません。 –

+0

@ダン:いいえ。それは辞書自体のためのスペースではなく、NSMutableDictionaryへのポインタのためのスペースを割り当てます。 –

+0

これは遅く投稿する方法ですが、今後のGoogle社員にとっては、[NSMutableDictionary dictionaryWithContentsOfFile:]を使用して自動的に割り当て、初期化することもできます。 – vilhalmer

関連する問題