我在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
答案 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;