2012-06-18 4 views
0

Я оглянулся, чтобы ответить на это, потому что кажется простым, но я не мог найти что-то, что хватило. Я пытаюсь проверить программу, которую я имею с поддельными данными. Я создал класс StudentData, который обладает атрибутами для ученика, а также имеет массив, чтобы удерживать их все.Не удается получить данные из пользовательского класса

Когда другой класс нуждается в них, он вызывает метод getStudent (который является единственной открытой частью этого класса до сих пор) и отправляет идентификационный номер, чтобы вернуть имя этого студента.

Моя проблема заключается в том, что я не могу понять, как анализировать массив учащихся, чтобы соответствовать идентификационным номерам ученика с тем, который был передан. Сохраняя ту же проблему, я не могу понять, как вытащить имя из студенческий объект.

Вот мой код до сих пор:

// StudentData.m 

#import "StudentData.h" 

@interface StudentData() { 
    NSString *ID; 
    NSString *firstName; 
} 
@property (nonatomic, strong) NSMutableArray *studentArray; 
@end 

@implementation StudentData 
@synthesize studentArray = _studentArray; 

- (NSMutableArray *)studentArray { 
    if(!_studentArray) _studentArray = [[NSMutableArray alloc] init]; 
    return _studentArray; 
} 

- (void)awakeFromNib { 

    NSArray *idA = [NSArray arrayWithObjects:@"111", @"685", nil]; 
    NSArray *fnA = [NSArray arrayWithObjects:@"Mark", @"Sam", nil]; 

    for(int i = 0; i < idA.count; i++) { 
     StudentData *tempCurrentStudent = [[StudentData alloc] init]; 
     ID = [idA objectAtIndex:i]; 
     firstName = [fnA objectAtIndex:i]; 

     [self.studentArray addObject:tempCurrentStudent]; 
    } 
} 

- (NSString *)getStudentsFirstName:(NSString *)studentID { 
    NSString *firstName; 

    for(int i = 0; i < self.studentArray.count; i++) { 
     if([studentID isEqualToString:[[self.studentArray objectAtIndex:i] self.firstName]]) { // ERROR 
      fN = [[self.studentArray objectAtIndex:i] self.firstName]; // ERROR 
     } 
    } 

    return firstName; 
} 

@end 

Ошибка я получаю это: Ожидать «]» и ошибка указывает на «self.firstName» линий.

Если я использую "[self.studentArray objectAtIndex: i] .firstName;" Я получаю сообщение об ошибке: Свойство 'firstName' не найдено на объекте типа 'id' Я даже получаю эту ошибку, если я создаю свойство firstName (как локальное, так и общедоступное). Это имеет смысл, потому что массив технически заполнен типами «id». Я также знаю, что в отличие от java я не могу использовать дженерики или что-то в этом роде.

Любая помощь была бы высоко оценена, и если она нуждается в разъяснении, пожалуйста, дайте мне знать! Кстати, это приложение для ipod/ipad, если это вообще помогает.

Спасибо!

ответ

1

Две вещи:

  1. У тебя конфликт имен здесь. У вас есть локальная переменная с именем firstName, а параметр, переданный вашей функции проблемы, имеет то же имя.

  2. firstName НЕ является собственностью, если вы не определяете ее как одну. В этом случае это обычная локальная переменная. Значит, вы не можете получить к нему доступ, используя self.firstName, но только по firstName. Это одна из причин, по которой в рекомендациях по кодированию указано, что вы должны называть локальные переменные, начиная с подчеркивания (как вы уже делаете в свойстве studentArray). Таким образом, вы можете различать, является ли это локальной переменной или свойством.

Бест,

Flo

Смежные вопросы