2

我不明白我在这里可能做错了什么,因为我正在遵循一本说明书 - 关于设置调用类方法的值。我已经#imported它,一切都应该没问题。但是 Xcode 抱怨:“setWeightInKilos”和“setHeightInMeters”的类方法选择器不知道。这些实例方法是在“Person”类中实现的,所以我不知道为什么会这样。

    Person *aPerson = [[Person alloc] init]; 
    [Person setWeightInKilos:96];
    [Person setHeightInMeters:1.8];
    float bmi = [Person bodyMassIndex];
4

3 回答 3

3

这些是实例方法,而不是方法。因此,您应该使用变量的名称aPerson在实例上调用它们,而不是类的名称Person

Person *aPerson = [[Person alloc] init];
[aPerson setWeightInKilos:96];
[aPerson setHeightInMeters:1.8];
float bmi = [aPerson bodyMassIndex];

通常,所有-前面用 a 声明的方法都接受一个带有该类实例的变量;用 a 声明的方法采用+类名。

如果heightInMetersweightInKilos被声明为属性,您还可以使用另一种语法:您可以编写

aPerson.weightInKilos = 96;
aPerson.heightInMeters = 1.8;

不过,这只是同一事物的不同语法;在这两种情况下都会调用 setter 方法。

于 2012-07-16T03:33:26.070 回答
2

看起来您想设置名为weightand的实例变量height。因此,要修复它,请执行以下操作:

Person *aPerson = [[Person alloc] init]; 
[aPerson setWeightInKilos:96];
[aPerson setHeightInMeters:1.8];
于 2012-07-16T03:33:59.297 回答
2

在 Objective C 中,有两种类型的方法。类方法,它们不作用于对象,而是通常执行与该对象类型相关的一些任务。例如,有内置的方法来测试网络连接、设备功能等。这些总是用“+”号表示,不能在对象实例上调用,只能在类本身上调用。

另一种类型,实例方法,更为常见,并且作用于您实例化或自己创建的对象。这些是您在实现文件中编写的带有“-”前缀的方法。它们是您自己编写的 getter、setter 或方法之类的东西。

在您的情况下,您需要在 Person 对象的实例上调用这些 setter 方法,而不是在 Person 类本身上。设置整个类的高度或重量是没有意义的(也不可能),因为每个对象都需要有自己独特的高度和重量。

您需要致电:

Person *aPerson = [[Person alloc] init]; 
[aPerson setWeightInKilos:96];
[aPerson setHeightInMeters:1.8];
float bmi = [aPerson bodyMassIndex];
于 2012-07-16T03:41:39.987 回答