いくつかのスレッドを検索しましたが、答えが見つかりません。
私はObjective-Cを初めて使用し、アップル開発でブリーフィングを行って実験しましたが、エラーが発生し続けます: No visible @interface for 'XYZPerson' はセレクター 'saySomething' を宣言しています
コンソール プログラムには、XYZPerson というクラスが追加されています。.h および .m ファイルは次のとおりです。
これは XYZPerson.h ファイルです。
#import <Foundation/Foundation.h>
@interface XYZPerson : NSObject
@property (readonly) NSString *firstName;
@property (readonly) NSString *lastName;
@property (readonly) NSDate *dateOfBirth;
- (void)sayHello;
- (void)sayBooBoo;
- (void)saySomething;
+ (id)person;
@end
これは XYZPerson.m ファイルです。
#import "XYZPerson.h"
@implementation XYZPerson
- (void)sayHello
{
[self saySomething:@"Say Hello, World!"];
}
- (void)sayBooBoo
{
[self saySomething:@"Say BooBoo, World!"];
}
- (void)saySomething:(NSString *)greeting
{
NSLog(@"%@", greeting);
}
@end
main() のコードは次のとおりです。
#import <Foundation/Foundation.h>
#import "XYZPerson.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World from Main!");
XYZPerson *aPerson = [[XYZPerson alloc] init];
[aPerson sayHello];
[aPerson sayBooBoo];
[aPerson saySomething:@"Something"];
}
return 0;
}
これにより、ビルドの失敗が発生します。main() " [aPerson saySomething:@"Something"];" の行を削除すると
次に、プログラムは次の出力で実行されます。
013-05-14 15:38:04.102 XYZPerson[2303:303] Hello, World from Main!
2013-05-14 15:38:04.105 XYZPerson[2303:303] Say Hello, World!
2013-05-14 15:38:04.106 XYZPerson[2303:303] Say BooBoo, World!
main() で [aPerson sayHello] と [aPerson sayBooBoo] を呼び出すことができる理由がわかりませんが、[aPerson saySomething:@"Something."] は問題を引き起こします。