3

クラスには3つのプロパティNSObjectがあるという名前のクラスがあります。、、; テストクラスに 3 つのオブジェクトがあります。, , . すべてのオブジェクトを配列に入れています: その配列内のプロパティのデータにアクセスしようとしています。つまり、ループ内の配列内のオブジェクトのプロパティを読み書きする必要があります (for ループまたは while ループ)。 インターネットでたくさんの資料を見つけました。私がやろうとしていた方法は次のとおりです。 test.
testNameageid
sbc
NSArray *ary = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];

[[ary objectAtIndex:0] setName:@"example"];

このメソッドは、セッターとゲッターで機能していました。しかし、それは恐ろしいエラーを出しました。それを行うための「WORKING」方法はありますか?
ありがとう...

4

2 に答える 2

13

Personクラスを想像してみましょう:

@interface Person : NSObject

@property (nonatomic, copy) NSString *name;
@property (nonatomic) NSInteger age;
@property (nonatomic) long long identifier;

+ (instancetype)personWithName:(NSString *)name age:(NSInteger)age identifier:(long long)identifier;

@end

@implementation Person

+ (instancetype)personWithName:(NSString *)name age:(NSInteger)age identifier:(long long)identifier {
    Person *person = [[self alloc] init];
    person.name = name;
    person.age = age;
    person.identifier = identifier;

    return person;
}

@end

次に、次のように人の配列を作成できます。

NSArray *people = @[[Person personWithName:@"Rob" age:32 identifier:2452323],
                    [Person personWithName:@"Rachel" age:29 identifier:84583435],
                    [Person personWithName:@"Charlie" age:4 identifier:389433]];

次に、次のように人の名前の配列を抽出できます。

NSArray *names = [people valueForKey:@"name"];
NSLog(@"%@", names);

それは生成します:

2013-09-27 14:57:13.791 MyApp[33198:a0b] (
    Rob,
    Rachel,
    Charlie
)

2 番目の に関する情報を抽出する場合は、次Personのようになります。

Person *person = people[1];
NSString *name = person.name;
NSInteger age = person.age;
long long identifier = person.identifier;

第三者の年齢を変更する場合は、次のようになります。

Person *person = people[2];
person.age = 5;

または、配列を反復処理して情報を抽出する場合は、それも実行できます。

for (Person *person in people) {
    NSString *name = person.name;
    NSInteger age = person.age;
    long long identifier = person.identifier;

    // now do whatever you want with name, age, and identifier
}
于 2013-09-27T18:58:55.887 に答える
1

これを試して

STEP 1 : 最初に適切なオブジェクト タイプにキャストする

s *myS = (s *)[array objectAtIndex:0];
b *myB = (b *)[array objectAtIndex:1]; 
c *myC = (c *)[array objectAtIndex:2]; 

STEP 2 : 必要なプロパティを設定/取得する

myS.name = @"example";
于 2013-09-27T18:32:42.043 に答える