2011-02-26 118 views
0

好了,這裏是我的代碼應用程序崩潰IBAction爲方法

-(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' 

任何人誰知道爲什麼嗎?我感到沮喪。

+0

爲什麼不使用調試器來查找應用崩潰的確切步驟? –

+0

我不熟悉這個語法'^ {[self plusOneDate]; }'。你確定沒問題嗎? – Noam

+0

這就是Objective-C 2.0的塊語法。認爲匿名關閉。它在Apple的GCC以及clang編譯器(適用於所有人)中都可用。 – jer

回答

0

這不是一個答案,而是一個觀察。在方法結尾處分配給appStateDate的值是一個自動釋放對象,無處保留。你不能依賴屬性的「保留」屬性(如果appStateDate實際上是作爲屬性聲明的話),因爲你沒有在屬性中使用屬性。

只要該IBAction完成,當runloop消耗NSAutoreleasePool時,appStateDate所指向的對象將被回收。也許這就是崩潰的來源。

+0

你是對的,這是一個記憶問題;)thx! – Kleemann