0

このプログラムを実行する前に、エラーまたは警告はありません。しかし、それを実行すると、私が得ている出力はで(lldb)あり、XCodeは私のNSLog出力を強調表示して言いThread 1 Breakpoint 1ますか?私の最初の質問は、なぜ出力が得られないのか、そして出力を得るために必要なものをどのように修正できるのかということです。そして、私の2番目の質問は、これらの各部分をどのように分割して、独自のクラスに入れることができるかということです。したがって、それらすべてをmain.mに含めないでください。これは、JavaからのXCodeでのコーディングの最初の日なので、まだこの言語を学んでいます。ありがとうございました。

パート1

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    NSString * name;
    int age;
    int weight;
}
    /***************************************
     * MUTATORS FOR PERSON INTERFACE
     ***************************************/
    - (void) setName : (NSString *) n;
    - (void) setAge : (int) a;
    - (void) setWeight : (int) w;


    /***************************************
    * MUTATORS FOR PERSON INTERFACE
    ***************************************/
    -(NSString *) getName;
    -(int) getAge;
    - (int) getWeight;
@end

パート2

@implementation Person
    /***************************************
     * MUTATORS FOR PERSON IMPLEMENTATION
     ***************************************/
    -(void) setName:(NSString *) n
    {
        name = n;
    }
    -(void) setAge:(int) a
    {
        age = a;
    }
    -(void) setWeight:(int)w
    {
        weight = w;
    }



    /**********************************
     * ACCESSORS FOR PERSON IMPLEMENTATION
     **********************************/
    -(NSString *) getName
    {
        return name;
    }
    -(int) getAge
    {
        return age;
    }
    -(int) getWeight
    {
        return weight;
    }
@end

パート3これは私が問題を抱えているところです。NSLogは好きではありません

int main (int argc, const char * argv[])
{
    @autoreleasepool
    {
        Person *p1 = [[Person alloc]init];

        [p1 setName: @"Chris"];
        [p1 setAge:18];
        [p1 setWeight:200];

        NSLog(@"\nName: %@ \nAge: %i \nWeight: %i", p1.getName, p1.getAge, p1.getWeight);
    }

    return 0;
}
4

2 に答える 2

1

NSLogを%@使用する場合、オブジェクトのロギングに使用されますが、これらのメソッドはint(プリミティブ型)を返します。それらを%d(Decimal intの文字列フォーマット)に置き換えると、その行はクラッシュしなくなります。

それらを分割するには、新しい.mファイルと.hファイルを作成するだけです。XCodeは、このプロセスを支援できるはずです。.mファイルは自動的にコンパイルされ、.hファイルは(一般的に言えば)参照するクラスに関する情報を必要とするすべてのファイルに含まれている必要があります。したがって、パート1はPerson.hになり、パート2はPerson.hになります(行を含め、@import Person.hパート3はmain.mに残ります。

于 2012-11-14T03:44:57.293 に答える
0

私に聞いても構わないのなら、プロパティだけを使ってみませんか?これにより、コードがクリーンでシンプルに保たれ、入力の手間も省けます。プロパティが提供できないカスタム動作を実装する必要がある場合にのみ、アクセサーを実装する必要があります。

于 2012-11-14T07:42:50.087 に答える