過去にObjective-CでNSCalendarクラスとNSDateComponentsクラスを使って、以下のような現在の年度をNSNumber型で取得するメソッドがありました。このメソッドを
- (NSNumber*)yearNumber { NSCalendar* gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; NSDateComponents* comp = [gregorian components:NSYearCalendarUnit fromDate:[NSDate date]]; return [NSNumber numberWithInteger:comp.year]; }
iOS 8 SDKを使ってビルドをすると、下記のようなワーニングが表示されるようになります。
example.m:164:74: 'NSGregorianCalendar' is deprecated: first deprecated in iOS 8.0 - Use NSCalendarIdentifierGregorian instead
example.m:163:49: 'NSYearCalendarUnit' is deprecated: first deprecated in iOS 8.0 - Use NSCalendarUnitYear instead
iOS 8.0以降、NSGregorianCalendar
とNSYearCalendarUnit
の利用がdeprecated(非推奨)となりました。
iOS 7以前 | iOS 8以降 |
---|---|
NSGregorianCalendar | NSCalendarIdentifierGregorian |
NSYearCalendarUnit | NSCalendarUnitYear |
以下のように書き換えることが可能です。
- (NSNumber*)yearNumber { NSCalendar* gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian] autorelease]; NSDateComponents* comp = [gregorian components:NSCalendarUnitYear fromDate:[NSDate date]]; return [NSNumber numberWithInteger:comp.year]; }
他にも名前が変わっている定義がいくつかあります。
iOS 7以前 | iOS 8以降 |
---|---|
NSGregorianCalendar | NSCalendarIdentifierGregorian |
NSYearCalendarUnit | NSCalendarUnitYear |
NSMonthCalendarUnit | NSCalendarUnitMonth |
NSDayCalendarUnit | NSCalendarUnitDay |
NSHourCalendarUnit | NSCalendarUnitHour |
NSMinuteCalendarUnit | NSCalendarUnitMinute |
NSWeekdayCalendarUnit | NSCalendarUnitWeekday |