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を付けて宣言されたすべてのメソッドは-、そのクラスのインスタンスを持つ変数を取ります。テイクで宣言されたメソッドは+クラス名を取ります。

heightInMetersとがプロパティとして宣言されている場合に使用できる代替構文もあります。次のweightInKilosように記述できます。

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

ただし、これは同じものの構文が異なるだけです。どちらの場合も、setterメソッドが呼び出されます。

于 2012-07-16T03:33:26.070 に答える
2

weightと呼ばれるインスタンス変数を設定したいようですheight。したがって、これを修正するには、次のようにします。

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

Objective Cには、2つのタイプの方法があります。クラスメソッド。オブジェクトには作用しませんが、通常はそのタイプのオブジェクトに関連するタスクを実行します。たとえば、ネットワーク接続やデバイス機能などをテストするための組み込みメソッドがあります。これらは常に「+」記号で示され、オブジェクトのインスタンスでは呼び出すことができず、クラス自体でのみ呼び出すことができます。

他のタイプのインスタンスメソッドは、はるかに一般的であり、インスタンス化または自分で作成したオブジェクトに作用します。これらは、「-」プレフィックスを付けて実装ファイルに書き込むメソッドです。それらは、ゲッター、セッター、または自分で作成したメソッドのようなものです。

あなたの場合、Personクラス自体ではなく、Personオブジェクトのインスタンスでこれらのセッターメソッドを呼び出す必要があります。すべてのオブジェクトが独自の高さと重さを持っている必要があるため、クラス全体の高さや重さを設定することは意味がありません(また、それは不可能です)。

電話する必要があります:

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