NSCalendar ordinalityOfUnit不会正确返回星期几

时间:2017-12-18 09:32:38

标签: ios objective-c nscalendar

我必须在Objective C类中确定星期几。 试图使用这种方法:

[assembly: ExportRenderer(typeof(Page), typeof(CustomPageRender))]
namespace FormsApp2.iOS
{
class CustomPageRender :PageRenderer
{
    public override void ViewWillLayoutSubviews()
    {
        base.ViewWillLayoutSubviews();
        if (this.NavigationController != null)
        {
            CGRect rect = View.Frame;
            rect.Y = -44;
            View.Frame = rect;

            CGRect NavRect = NavigationController.NavigationBar.Frame;
            NavRect.Y = UIScreen.MainScreen.Bounds.Height - 44;
            NavigationController.NavigationBar.Frame = NavRect;
        }
    }
}
}

这是我的代码:

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

无论哪一天,它总是返回-1。即使我改变日期,或循环整整一周。 但是,使用这种方法,效果很好:

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

到目前为止一切顺利。唯一的问题是:不推荐使用此方法(在iOS 8.0中首次弃用,因此很久以前)。 有点害怕使用旧的弃用方法进行生产。有没有办法使(甚至非常)新方法有效?

1 个答案:

答案 0 :(得分:1)

来自ordinalityOfUnit:inUnit:forDate:文档:

  

对于给定的绝对时间,返回指定的较大日历单位(例如一周)内较小日历单位(例如一天)的序号。

您已为前两个参数指定了相同的单位,您需要指定第一个的日期和第二个的星期:

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

HTH