2011-03-05 163 views
2

我嘗試比較兩個NSDate對象。 但它一直失敗,我看不出什麼是錯的。比較兩個NSDate失敗

-(IBAction)nextAction 
{ 
    NSDate *today = [NSDate date]; 
    if([appStateDate compare:today] == NSOrderedAscending) { 
     dispatch_async(calcQueue, ^{ [self plusOneDate]; }); 
    } 
} 

沒有代碼,它工作正常。

它只是崩潰,並且EXE_BAD_ACCESS在主要方法的這一行上。

int retVal = UIApplicationMain(argc, argv, nil, nil); 

,並打印在使用調試器

'+[ compare:]: unrecognized selector sent to class 0x634d7e0`' 

我不是很好,所以如果你知道任何好的教程或指南我想知道他們;)對不起,我的英語

+0

,很高興我碰到你的問題,以學習來了([firstDate compare:secondDate] == NSOrderedAscending){// secondDate在firstDate之後} else {// firstDate在secondDate之後} – RanLearns 2012-04-24 19:30:49

回答

3

外貌像appStateDate未初始化,或者包含NSDate以外的內容。你在哪裏初始化它?

+0

它的intitialize在viewDidLoad中。 [NSDate日期]; – Kleemann 2011-03-06 09:29:48

+0

你走了。 '[NSDate date]'產生一個自動釋放的對象 - 一旦viewDidLoad返回,它就會被釋放。爲了使它在事件之間保持不變,可以使用'[[NSDate alloc] init]'或者[保留]它。 – 2011-03-06 16:19:27

+0

thx;)它解決了這個問題。 – Kleemann 2011-03-06 16:40:41

0

this主題,我會說像@ Seva-Alekseyev,在- (IBAction)nextAction,appStateDate看起來不像它的聲明/初始化。也許你應該寫下你已經在你的- (void)plusOneDate方法中。

只是爲了檢查,你也可以NSLog的變量類型和值appStateDate看看它是否應該是。

我是初學者也一樣,我不知道,但只是想幫助:)

0

首先,我強烈建議你看看Memory Management Programming Guide得到的內存管理有更好的認識。

在我看來,appStateDate不是NSDate類的實例,因爲您正在分配它的方式。當你使用[NSDate date]時,你實際上是在說[[[NSDate alloc]init]autorelease],以便在實際使用它之前釋放對象。通常你想對類實例對象做的事是allocinit他們,然後release他們在dealloc方法中。

我希望它可以幫助你

0

這實際上是今天的問題。 內存地址是在控制檯中,我懸停在對象找到一個匹配。 我只保留它,並在方法結尾釋放它。 感謝所有的答案;)

2

2個NSDate日期比較:到處尋找如何比較一個日期是否是一些其他的日期之前之後

NSDate *date1; NSDate *date2; 
if ([date1 timeIntervalSinceDate:date2] > 0) 
    // date1 is newer.