【发布时间】:2011-02-26 16:16:33
【问题描述】:
好的,这是我的代码
-(IBAction)nextAction
{
dispatch_async(myQueue, ^{ [self plusOneDate]; });
}
-(void)plusOneDate
{
int hoursToAdd = 1;
// set up date components
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setHour:hoursToAdd];
// create a calendar
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *newDate2 = [gregorian dateByAddingComponents:components toDate:appStateDate options:0];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"YYYYMMddHH0000"];
dateString = [formatter stringFromDate:newDate2];
[formatter release];
appStateDate = newDate2;
newDate2 = nil;
}
它所做的只是将 1 小时添加到 NSDate 对象 (appStateDate)、格式化它并设置 dateString 变量。
每次我按下应用程序中的 UIButton,连接到nextAction,应用程序就会崩溃。
我尝试删除 xib 文件并创建一个新文件。它没有帮助,仍然崩溃。
在调试模式下:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '(null): unrecognized selector sent to class 0x6242690'
有人知道为什么吗?我越来越沮丧了。
【问题讨论】:
-
为什么不使用调试器来准确找出应用程序崩溃的步骤?
-
我不熟悉这种语法
^{ [self plusOneDate]; }。你确定没问题吗? -
这是 Objective-C 2.0 的块语法。想想匿名闭包。它在 Apple 的 GCC 以及 clang 编译器(适用于所有人)中都可用。
-
@Noam -- 这是一个障碍。他们是新的。这是正确的语法。
-
在调试器中,您可以根据其地址找出哪个对象崩溃,在本例中为 0x6242690。在调试器控制台中,输入
po 0x6242690,它将打印对象的描述。
标签: iphone objective-c xcode