5

私が書き込もうとしている単純な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ファイルへのポインタを使用して別のViewControllerでこれを行っていましたが、それが機能しないことを発見したら、単純化して、ClassListファイル内にサンプルオブジェクトとキーを設定しようとしました。

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

デバッガー変数リストを確認したところ、キーと値のペアが0のNSMutableDictionaryとして正しく識別されたclassFilenameGlossaryが表示されています。エラーは発生していません。辞書は決して変更されません。現時点では、masterindexpathファイルからロードされたディクショナリは空です(まだアイテムを追加できていないため)が、ディクショナリにアイテムを追加できなくなることはありません。

私はiPhoneプログラミングの初心者なので、基本的なものが欠けていると確信しています。助けていただければ幸いです。

4

1 に答える 1

8

この行:

[classFilenameGlossary initWithContentsOfFile:masterindexpath];

次のようになります。

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

NSMutableDictionary にメモリを割り当てるのを忘れたため、初期化されません。

于 2009-05-21T15:21:01.357 に答える