2

私が書き込もうとしている小さなiPhoneプログラムに何かが欠けていると確信していますが、コードは単純で、エラーなしでコンパイルされるため、エラーがどこにあるのかわかりません。

学生の属性を格納するためにNSMutableDictionaryを設定しました。各属性には、一意のキーがあります。ヘッダーファイルで、NSMutableDictonaryのstudentStoreを宣言します。

@interface School : NSObject
{
    @private
    NSMutableDictionary* studentStore;
}   

@property (nonatomic, retain) NSMutableDictionary *studentStore;

そしてもちろん、実装ファイルでは:

@implementation School
@synthesize studentStore;

そして、辞書にオブジェクトを追加したいと思います。

- (BOOL)addStudent:(Student *)newStudent
{
    NSLog(@"adding new student");
    [studentStore setObject:newStudent forKey:newStudent.adminNo];
    return YES;
}

クラスStudentには次の属性があります。@interfaceStudent:NSObject {@private NSString * name; //属性NSString*性別; int年齢; NSString * adminNo; }

ここで、newStudentの値は次のとおりです。Student* newStudent = [[Student alloc] initWithName:@ "jane" sex:@ "female" age:16 adminNo:@ "123"];

しかし、辞書を調べると、次のようになります。

- (void)printStudents
{
    Student *student;
    for (NSString* key in studentStore)
    {
        student = [studentStore objectForKey:key];
        NSLog(@"     Admin No: %@", student.adminNo);
        NSLog(@"    Name: %@", student.name);
        NSLog(@"Gender: %@", student.gender);
    }
NSLog(@"printStudents failed");
}  

テーブルの値を出力できません。代わりに、「printStudentsfailed」という行を出力します。

これはかなり基本的なことだと思いますが、私はiOSプログラミングに慣れていないので、少し困惑しています。どんな助けでもありがたいです。ありがとう。

4

1 に答える 1

5

インスタンスstudentStore変数は。へのポインタですNSMutableDictionary。デフォルトでは、nilを指します。つまり、オブジェクトを指しません。のインスタンスを指すように設定する必要がありますNSMutableDictionary

- (BOOL)addStudent:(Student *)newStudent
{
    NSLog(@"adding new student");
    if (studentStore == nil) {
        studentStore = [[NSMutableDictionary alloc] init];
    }
    [studentStore setObject:newStudent forKey:newStudent.adminNo];
    return YES;
}
于 2012-07-27T04:52:10.480 に答える