Iphone 调用类时接收NSInvalidArgumentException
我正在学习Objective-c,我正在尝试创建一个类,该类以MySQL时间戳格式生成当前日期。代码编译得很好,但我得到以下错误Iphone 调用类时接收NSInvalidArgumentException,iphone,objective-c,ios5,Iphone,Objective C,Ios5,我正在学习Objective-c,我正在尝试创建一个类,该类以MySQL时间戳格式生成当前日期。代码编译得很好,但我得到以下错误 012-09-07 08:21:00.368 jsonclient[6831:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[getcurrenttime toString]: unrecognized selector sent
012-09-07 08:21:00.368 jsonclient[6831:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[getcurrenttime toString]: unrecognized selector sent to class 0x36a9c'
我相信这是一个简单的答案,但我自己一直找不到。下面是我对类的调用,后面是头文件和.m文件
NSString* CurrentDate = [getcurrenttime toString];
#import <UIKit/UIKit.h>
@interface getcurrenttime : NSObject {
NSString *toString;
}
+(NSString*) toString;
@end
#import "getcurrenttime.h"
@implementation getcurrenttime
- (id)init
{
self = [super init];
if (self) {
// Initialization code here.
}
return self;
}
- (NSString*) toString {
NSDate *now =[NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
toString = [formatter stringFromDate:now];
return toString;
}
@end
NSString*CurrentDate=[getcurrenttime-toString];
#进口
@接口getcurrenttime:NSObject{
NSString*toString;
}
+(NSString*)toString;
@结束
#导入“getcurrenttime.h”
@实现getcurrenttime
-(id)init
{
self=[super init];
如果(自我){
//这里是初始化代码。
}
回归自我;
}
-(NSString*)toString{
NSDate*现在=[NSDate日期];
NSDateFormatter*格式化程序=[[NSDateFormatter alloc]init];
[格式化程序setDateFormat:@“yyyy-MM-dd HH:MM:ss”];
toString=[formatter stringFromDate:now];
返回字符串;
}
@结束
类的接口和实现之间存在不匹配。最简单的解决方案是更改以下行:
+ (NSString*) toString
请注意
+
而不是-
,这表示类方法。必须首先初始化对象
getcurrenttime *objGetTime = [[getcurrenttime alloc] init];
getcurrenttime*objGetTime=[[getcurrenttime alloc]init];
然后调用它的方法
NSString* CurrentDate = [objGetTime toString];
NSString*CurrentDate=[objGetTime toString];
如果你想用一个全局方法调用
NSString* CurrentDate = [getcurrenttime toString];
NSString*CurrentDate=[getcurrenttime toString];
但是在getcurrenttime.m文件中用“-”代替“+”
+ (NSString*) toString
{
NSDate *now =[NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *toString = [formatter stringFromDate:now];
return toString;
}
+(NSString*)toString
{
NSDate*现在=[NSDate日期];
NSDateFormatter*格式化程序=[[NSDateFormatter alloc]init];
[格式化程序setDateFormat:@“yyyy-MM-dd HH:MM:ss”];
NSString*toString=[formatter stringFromDate:now];
返回字符串;
}
这给我带来了一个编译器错误。现在它的意思是“getcurrenttime”的No visible@interface声明选择器“toString”第二个应答地址。在阅读另一个问题后,我将-切换为+但当它不起作用时,我从未将其切换回。这是我的头球+。我将+放在.m文件中,得到了一个语法错误。@CODEGY007唯一需要修改的是,如果您使用的是类方法(您在.h文件“+(NSString*)toString”上定义的方法),则必须声明“NSString*toString”在方法本身内部。答案是正确的。在@interface部分,您将
toString
声明为类方法,在@implementation中声明为实例方法。在实现部分,而不是标头。标头中有+
,实现中有-
。对不起,我想我误解了您。您想让我把+换成-而不是相反。谢谢