找不到'initWithName ...'的方法定义。错误

时间:2014-03-29 11:22:20

标签: objective-c nsobject

我在Xcode中有一个NSObject类, @implementation 行给了我一个错误; ' initWithName的方法定义:tutorID:tutorPhone:tutorEmail:'找不到。

我的.h文件:

#import <Foundation/Foundation.h>

@interface TutorsItem : NSObject

@property (nonatomic, strong) NSString *tutorName;
@property (nonatomic) int tutorID;
@property (nonatomic, strong) NSString *tutorPhone;
@property (nonatomic, strong) NSString *tutorEmail;


- (id)initWithName:(NSString *)tutorName tutorID:(int)tutorID tutorPhone:(NSString *)tutorPhone tutorEmail:(NSString *)tutorEmail;

@end

我的.m文件:

#import "TutorsItem.h"

@implementation TutorsItem

@synthesize tutorName = tutorName;
@synthesize tutorID = tutorID;
@synthesize tutorPhone = tutorPhone;
@synthesize tutorEmail = tutorEmail;

- (id)initWithName:(NSString *)title subtitle:(NSString *)subtitle {
    self = [super init];
    if (self) {
        self.tutorName = tutorName;
        self.tutorID = tutorID;
        self.tutorPhone = tutorPhone;
        self.tutorEmail = tutorEmail;

    }

    return self;
}

@end

4 个答案:

答案 0 :(得分:1)

您想将.m文件更改为:

- (id)initWithName:(NSString *)tutorName tutorID:(int)tutorID tutorPhone:(NSString *)tutorPhone tutorEmail:(NSString *)tutorEmail{
    self = [super init];
    if (self) {
        self.tutorName = tutorName;
        self.tutorID = tutorID;
        self.tutorPhone = tutorPhone;
        self.tutorEmail = tutorEmail;

    }

    return self;
}

.m文件中函数的标题只包含副标题,而不包括tutorName,tutorId等。 我希望这会有所帮助:)

答案 1 :(得分:0)

Method defenition not found不是错误,这是一个警告。而且你得到它,因为你没有在@implementation部分提供你的方法的定义。您仍然可以编译并运行您的代码,但如果您尝试调用此方法,您的应用程序将崩溃。只需提供定义,此警告就会消失

顺便说一句:

    self.tutorName = tutorName;
    self.tutorID = tutorID;
    self.tutorPhone = tutorPhone;
    self.tutorEmail = tutorEmail;

- (id)initWithName:(NSString *)title subtitle:(NSString *)subtitle内,因为你在那里做的事没有意义。你在那里做的是为自己分配变量值

答案 2 :(得分:0)

报告不是错误,它是一个警告(除非您已启用&#34;警告是错误&#34;)。当@interface声明了@implementation无法提供的方法时,这是一个常见的警告。

在@Wain评论中,你有一个init方法,在你的实现中有一个非常不同的签名;您是否打算将其与您定义的签名相匹配,或者您是否计划提供两个初始化程序?没有一种方法不会出现在你的@interface中,但是预计@interface中提供的所有内容都有一个实现。

答案 3 :(得分:0)

就这样,你很清楚人们试图在你的内容中告诉你。你有以下代码行

- (id)initWithName:(NSString *)tutorName tutorID:(int)tutorID tutorPhone:(NSString *)tutorPhone tutorEmail:(NSString *)tutorEmail;

但在你的.m文件中你有这个......

- (id)initWithName:(NSString *)title subtitle:(NSString *)subtitle

正如您所看到的2行代码不匹配,编译器希望您在.m文件中使用与您在.h中定义的名称相同的方法。因此,要消除错误,您的.m文件需要具有以下内容

- (id)initWithName:(NSString *)tutorName tutorID:(int)tutorID tutorPhone:(NSString *)tutorPhone tutorEmail:(NSString *)tutorEmail
{
    self = [super init];
    if (self) {
        self.tutorName = tutorName;
        self.tutorID = tutorID;
        self.tutorPhone = tutorPhone;
        self.tutorEmail = tutorEmail;

    }

    return self;
}

正如其他人也指出让你的参数名称与你的属性相同不是一个好主意,它只会增加混乱。您的@synthesize

也是如此

此...

@synthesize tutorName = tutorName;

也可能是这个......

@synthesize tutorName;