0

これに対する答えは単純に思えるので探しましたが、十分なものが見つからなかったようです。私が持っているプログラムを偽のデータでテストしようとしています。学生の属性を持ち、それらすべてを保持する配列を持つ StudentData クラスを作成しました。

別のクラスがそれらを必要とする場合、getStudent メソッド (これまでのところ、このクラスの唯一の公開部分です) を呼び出し、ID 番号を送信してその学生の名前を取得します。

私の問題は、学生配列を解析して、学生 ID 番号を渡された番号と一致させる方法がわからないことです。同じ問題を抱えているため、学生オブジェクトから名前を引き出す方法もわかりません。

これまでの私のコードは次のとおりです。

// 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

私が取得し続けるエラーは次のとおりです。Expect ']'で、エラーは「self.firstName」行を指しています。

「[self.studentArray objectAtIndex:i].firstName;」を使用する場合 次のエラーが表示されます:プロパティ 'firstName' がタイプ 'id' のオブジェクトに見つかりません"firstName" をプロパティ (ローカルまたはパブリックの両方) にすると、このエラーが発生します。配列は技術的に「id」タイプで満たされているため、これは理にかなっています。また、Javaとは異なり、ジェネリックなどを使用できないことも知っています。

明確化が必要な場合はお知らせください。ところで、これは ipod/ipad アプリ用です。

ありがとう!

4

1 に答える 1

1

2つのこと:

  1. ここで名前の競合が発生しています。firstName というローカル変数があり、問題の関数に渡されるパラメーターには同じ名前があります。

  2. firstNameプロパティとして定義しない限り、プロパティではありません。この場合、それは単なる通常のローカル変数です。を使用してアクセスすることはできませんself.firstNameが、firstName. これが、コーディング ガイドラインでローカル変数にアンダースコアで始まる名前を付ける必要があると述べている理由の 1 つです (既にstudentArrayプロパティで行っているように)。これにより、ローカル変数かプロパティかを区別できます。

一番、

フロー

于 2012-06-18T20:04:21.923 に答える