2017-05-05 72 views
-1

这是在Objective C中编写的代码,我将值初始化为参数化的构造函数。尽管所有字段都正确输入,但我在输入NSDate字段时遇到问题。下面给出的是构造函数声明,实现和最后的方法调用。如何在目标C中的参数化构造函数中初始化NSDate?

//初始化声明

-(instancetype)initWithParam1:(NSNumber*)customerId_ withParam2: (NSString*)firstName_ withParam3:(NSString*)lastName_ withParam4:(NSDate*)dateOfBirth_ withParam5:(NSString*)address_ withParam6:(NSNumber*)mobileNumber_; 

//初始化定义

-(instancetype)initWithParam1:(NSNumber *)customerId_ withParam2:(NSString *)firstName_ withParam3:(NSString *)lastName_ withParam4:(NSDate *)dateOfBirth_ withParam5:(NSString *)address_ withParam6:(NSNumber *)mobileNumber_ 

{ 
    self = [super init]; 
    if(self) 
    { 
     self.customerId = customerId_; 
     self.firstName = firstName_; 
     self.lastName = lastName_; 
     self.dateOfBirth = dateOfBirth_; 
     self.address = address_; 
     self.mobileNumber = mobileNumber_; 
    } 
    return self; 

//初始化呼叫

Customer *c1 = [[Customer alloc]initWithParam1:@1001 withParam2:@"Aman" withParam3:@"Zaidi" withParam4:@"22-05-1993" withParam5:@"Bangalore" withParam6:@9567812345]; 

如何在字段中输入日期的任何建议。对不起,对于天真,但我对Objective C完全陌生,而且我已经习惯了语法。

+0

'@ “22-05-1993”'是一个' NSString',而不是'NSDate'。 – rmaddy

+0

您传递给'param6'的值是'NSNumber',而不是'NSString'。电话号码应该是字符串,而不是数字。你不会在电话号码上进行数学运算。 – rmaddy

+0

感谢您的更正。 :) – jRapp3r

回答

0

日期是一个字符串。

您需要的参数更改为NSString

... withParam4:(NSString *)dateOfBirth_ ... 

,并在init()方法将字符串转换为NSDateNSDateFormatter

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
formatter.dateFormat = @"dd-MM-yyyy"; 
self.dateOfBirth = [formatter dateFromString:dateOfBirth_]; 
+1

小心将出生日期字符串转换为'NSDate'。将会有时区问题导致在错误的日期显示该日期。 – rmaddy

+0

实际上,没有指定任何区域设置或时区,格式化程序应该考虑当前时区。 – vadian

+1

对。但是,如果稍后将该日期显示给其他时区的其他用户,则使用该用户的时区将日期转换为字符串可以将日期显示为原始生日字符串的一天。 – rmaddy

相关问题