2017-12-18 430 views
0

我必須確定Objective C類中的星期幾。 嘗試使用這種方法:NSCalendar ordinalityOfUnit不會正確返回星期幾

- (NSUInteger)ordinalityOfUnit:(NSCalendarUnit)smaller 
         inUnit:(NSCalendarUnit)larger 
         forDate:(NSDate *)date; 

這是我的代碼:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
(int) [gregorian ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitWeekday forDate:[NSDate date]]; 

它總是返回-1,不管今天是什麼日子。即使我改變了日期,或者整個星期都在循環。 但是,使用這種方法,它工作得很好:

- (NSDateComponents *)components:(NSCalendarUnit)unitFlags 
         fromDate:(NSDate *)date; 

到目前爲止好。唯一的問題是:此方法已被棄用(在iOS 8.0中首次棄用,因此很久以前)。 有點害怕使用舊的棄用方法進行生產。有沒有辦法使(甚至不是)新方法的工作?

+2

https://開頭開發商.apple.com/documentation/foundation/nscalendar/1414841-components?language = objc我不認爲它已被棄用。 iOS8可能會棄用的是「NSWeekdayCalendarUnit」與「NSCalendarUnitWeekday」。 – Larme

+1

另外,請檢查'ordinalityOfUnit:inUnit:forDate:'的文檔。它說在某些情況下返回'NSNotFound'(比如'smaller'> ='larger'',因爲在你的情況下它們是相等的),'NSNotFound'可以從'NSUInteger'轉換爲'-1' int' – Larme

+0

Larme:你說得對。謝謝!這是一個簡單的解決方案... – gs80

回答

1

ordinalityOfUnit:inUnit:forDate:文檔:

返回,對於給定的絕對時間,較小的日曆單位的序數(如一天)指定的較大的日曆單元內(如一週)。

您已指定相同單元針對前兩個參數,你需要爲第一和周第二指定一天:

[gregorian ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitWeekOfMonth forDate:[NSDate date]] 

HTH