1

搜索了几个线程,但找不到答案。

我是 Objective-C 的新手,在 Apple 开发中通过简报并进行了实验并不断收到错误:“XYZPerson”没有可见的@interface 声明选择器“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."] 会导致问题。

4

1 回答 1

-1

正如评论中所指出的,这个完全相同的问题已经得到了回答,但为了给你一个快速的答案,你的 .h 有方法- (void)saySomething;,而你的 .m 请求一个输入参数(an NSString),所以你需要在你的 .h 中更改 saySomething对此:

- (void)saySomething:(NSString *)greeting

这与您在 .m 中使用的签名完全相同。

因为您在 StackOverFlow 上的活动有限,所以我只想建议您在发布问题之前进行一些研究。我相信您做到了,但如果您在此处发布问题之前进行彻底的搜索,这肯定对每个人都有好处。

于 2013-05-14T21:16:39.077 回答