2

このエラーを回避できないようです。宣言されていない識別子「ageBy」の使用。コードにインポート Person.h があるため、なぜそれが得られるのかわかりません。お時間をいただきありがとうございます。

Person.h

@interface Person : NSObject
{
 int _age;
 int _years;
 NSString *_name;
 NSString *_job;

} 

-(void)setAge:(int)age;
-(int)age;

-(void)setName:(NSString *)name;
-(NSString *)name;

-(void)setJob:(NSString *)job;
-(NSString *)job;

-(NSString *)summaryString;

-(void)ageBy:(int)years;


@end

人.m

#import "Person.h"
@implementation Person

-(void)setAge:(int)age{
  _age = age;
}
-(int)age{
  return _age;
}
-(void)setName:(NSString *)name{
  _name = name;
}
-(NSString *)name{
  return _name; }

-(void)setJob:(NSString *)job{
  _job = job;
}
-(NSString *)job{
  return _job;
}

-(NSString *)summaryString{
  return [NSString stringWithFormat:@"The Person %@ is %d years old and is a  %@",_name,_age,_job];

-(void)ageBy:(int)years{
  _years = years;
  _age = years + _age;

 }

 } 
 @end
4

2 に答える 2

4

ageBy:述べたように、問題はメソッドに埋め込まれているメソッドによって引き起こされsummaryStringます。

このクラスが最新の Objective-C を使用してどのように記述できるかを示したかったのです。

// Person.h
@interface Person : NSObject

@property (nonatomic, assign) int age;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *job;

- (void)ageBy:(int)years;

@end

// Person.m
@implementation Person

- (NSString *)description {
    return [NSString stringWithFormat:@"The Person %@ is %d years old and is a %@", self.name, self.age, self.job];
}

- (void)ageBy:(int)years {
    self.age = self.age + years;
}

@end
于 2012-11-25T20:30:57.567 に答える
4

あなたageBy:は内部で定義されていsummaryStringます。中かっこを直前に移動して、 の上に置くとよいでしょ@end-(void)ageBy:(int)years。そう:

-(NSString *)summaryString{
  return [NSString stringWithFormat:@"The Person %@ is %d years old and is a  %@",_name,_age,_job];
 } 

-(void)ageBy:(int)years{
  _years = years;
  _age = years + _age;

 }

また、スタイル ノートとして、summaryStringが単にデバッグ用である場合は、 として宣言したほうがよいでしょうdescription。後者は、Objective-C オブジェクトの実装依存の文字列記述を取得するための標準形式であり、正しい出力を作成するためにすべての子オブジェクトNSArrayを呼び出すことを知っているようなコレクション オブジェクトの正味の効果があります。description

于 2012-11-25T19:56:09.913 に答える