【问题标题】:Properties of objects on array (Objective-c)数组上对象的属性(Objective-c)
【发布时间】:2013-10-04 03:38:02
【问题描述】:

我有一个NSObject 类,它的名字是test.
test 类有 3 个属性。 Name, age, id;
我在测试类中有 3 个对象。 s, b, c.
我将所有对象放入数组中:NSArray *ary = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
我正在尝试访问该数组中的属性数据。这意味着我必须在循环(for 循环或 while 循环)的数组中读取、写入对象的属性。
我在网上找了很多资料。我接近做的方法是:

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

此方法适用于 setter 和 getter。但它确实给出了一个可怕的错误。有什么“WORKING”方法可以做到吗?
谢谢...

【问题讨论】:

  • @userXXX 现在标题更好了。 (我们不喜欢 Stack Overflow 上的所有大写。)
  • 数组中的三个对象是字符串“a”、“b”和“c”。 NSStrings 是不可变的,所以你不能改变它们。
  • “一个可怕的错误”相当不具体。
  • 这样做:NSArray *ary = [NSArray arrayWithObjects:a, b, c, nil];
  • 你说你有一个 test 对象数组,但你没有。你有一个字符串数组。如果您想要一个对象数组,则必须创建 test 类的三个实例并将它们添加到您的数组中。

标签: iphone objective-c arrays object properties


【解决方案1】:

让我们想象一个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
)

如果你想提取第二个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
}

【讨论】:

    【解决方案2】:

    试试这个

    第 1 步:首先将其转换为适当的对象类型

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

    第 2 步:设置/获取您想要的任何属性

    myS.name = @"example";
    

    【讨论】:

    • 步骤 2.5:删除单词“STEP”中的所有大写字母。第 3 步:也删除有害的类型转换,因为 objectAtIndex: 返回 id。第 4 步:对 NSArray 使用更详细的下标表示法,而不是 objectAtIndex:
    • 第五步:用冷水烫伤。
    猜你喜欢
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    相关资源
    最近更新 更多