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

学生类具有以下属性:@interface Student : NSObject { @private NSString* name; //属性 NSString* 性别;年龄; NSString* 管理员否;}

其中 newStudent 具有以下值: Student *newStudent = [[Student alloc] initWithName:@"jane" gender:@"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");
}  

它无法打印表中的值。相反,它会打印“printStudents failed”行。

我想这是非常基本的,但由于我是 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 回答