【问题标题】:NSPredicate error in ios6ios6中的NSPredicate错误
【发布时间】:2014-06-20 11:06:46
【问题描述】:

我在 iOS 6.1(模拟器)中遇到 NSPredicates 错误

我有以下谓词:

    NSPredicate *eventsWithinPeriodePredicate = [NSPredicate predicateWithFormat:@"(startDate >= %@) AND (endDate <= %@)", startDate, endDate];

如果我有一个包含两个对象的数组,其日期如下:

startDate = "2014-06-23T12:00:00.00000+0200";
endDate = "9999-12-31T23:59:59.00999+0100";

startDate = "2014-06-17T09:00:00.00000+0200";
endDate = "2014-06-17T11:00:00.00000+0200";

在 iOS 7(模拟器和设备)和 iOS 5(设备)中,如果我发送,我只会得到第二个事件 2014-06-17T00:00:00.00000 和 2014-06-17T23:59:00.00000

在模拟器中运行的 iOS 6.1 中,我得到了这两个事件。

我这里没有涉及任何 iOS6 特定代码。这真的是一个错误吗?我没有 iOS 6 设备,因此无法确定这是否会影响设备。

【问题讨论】:

  • 原来 iOS6.1 将日期 9999-12-31 解释为 1999-01-01 这就是搞砸了我的日期,进而搞砸了我的 NSPredicate。

标签: ios objective-c nspredicate ios6.1


【解决方案1】:

似乎我遇到了this 日期格式化程序的问题。

我只为 iOS 6 做了一个解决方法。我没有测试这是否是所有 iOS 6 版本中的错误,但考虑了所有这些问题。

    if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0") && SYSTEM_VERSION_LESS_THAN(@"7.0"))
    {
        if([toDateTimeString hasPrefix:@"9999"])
        {
            endDate = [NSDate distantFuture];
        }
    }

【讨论】:

    猜你喜欢
    • 2012-10-20
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    相关资源
    最近更新 更多