objective-c错误捕获

时间:2010-07-01 07:50:03

标签: objective-c iphone

我是obj-c的新手,需要一些关于此代码的帮助

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];  
[dateFormatter setDateFormat:@"E, d LLL yyyy HH:mm:ss Z"];
NSDate *date = [dateFormatter dateFromString:currentDate];

变量日期不能为零。如何才能使日期=当前时间无法格式化字符串? 我可以使用try / catch吗?如何?

4 个答案:

答案 0 :(得分:4)

为什么不检查格式化程序返回的日期,是否为nil指定当前日期?

NSDate *date = [dateFormatter dateFromString:currentDate];
if (!date)
   date = [NSDate date];

使用三元运算符(及其gcc扩展名)的1-liner:

NSDate *date = [dateFormatter dateFromString:currentDate]?:[NSDate date];

答案 1 :(得分:0)

可以试试这个:

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];   
[dateFormatter setDateFormat:@"E, d LLL yyyy HH:mm:ss Z"]; 
NSDate *date = nil;
@try
{
  date = [dateFormatter dateFromString:currentDate]; 
}
@catch (NSException *exception)
{
  date = [NSDate date];
}

答案 2 :(得分:0)

这个应该不起作用:

NSDate *date = [dateFormatter dateFromString:currentDate] || [NSDate date];

答案 3 :(得分:0)

你不应该这样做NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];因为自动释放使对象的生命周期不确定。忽略autorelease并在完成后释放对象。 (如果您不确定:当您将对象提供给已启用retain的属性时,您会经常看到这样的分配(使用自动释放)