0

Objective-C コードに問題があります。「Person」クラスから作成されたオブジェクトの詳細をすべて出力しようとしていますが、NSLog メソッドで姓名が取得されません。それらはスペースに置き換えられます。

Person.h: http://pastebin.com/mzWurkUL Person.m: http://pastebin.com/JNSi39aw

これは私の主なソースファイルです:

#import <Foundation/Foundation.h>
#import "Person.h"

int main (int argc, const char * argv[])
{
Person *bobby = [[Person alloc] init];
[bobby setFirstName:@"Bobby"];
[bobby setLastName:@"Flay"];
[bobby setAge:34];
[bobby setWeight:169];

NSLog(@"%s %s is %d years old and weighs %d pounds.",
      [bobby first_name],
      [bobby last_name],
      [bobby age],
      [bobby weight]);
return 0;
}
4

1 に答える 1

6

%s は、C スタイルの文字列 (null で終了する一連の文字) 用です。

NSString オブジェクトには %@ を使用します。通常、%@ は任意の Objective C オブジェクトの説明インスタンス メソッドを呼び出します。NSString の場合、これは文字列そのものです。

文字列フォーマット指定子を参照してください。

無関係なことですが、クラスの実装については、宣言されたプロパティと @synthesize を調べる必要があります。すべてのゲッターとセッターを生成するため、多くの入力を節約できます。

person.h:

#import <Cocoa/Cocoa.h>

@interface Person : NSObject
@property (nonatomic, copy) NSString *first_name, *last_name;
@property (nonatomic, strong) NSNumber *age, *weight;
@end

人.m

#import "Person.h"

@implementation Person
@synthesize first_name = _first_name, last_name = _last_name;
@synthesize age = _age, weight = _weight; 
@end

main.m

#import <Foundation/Foundation.h>
#import "Person.h"

int main (int argc, const char * argv[])
{
    Person *bobby = [[Person alloc] init];
    bobby.first_name = @"Bobby";
    bobby.last_name = @"Flay";
    bobby.age = [NSNumber numberWithInt:34]; // older Objective C compilers.

    // New-ish llvm feature, see http://clang.llvm.org/docs/ObjectiveCLiterals.html
    // bobby.age = @34;

    bobby.weight = [NSNumber numberWithInt:164]; 

    NSLog(@"%@ %@ is %@ years old and weighs %@ pounds.",
      bobby.first_name, bobby.last_name,
      bobby.age, bobby.weight);
    return 0;
}
于 2012-06-30T03:01:38.387 に答える