【问题标题】:NSPredicate with NSDateNSPredicate 与 NSDate
【发布时间】:2014-11-19 12:41:14
【问题描述】:

我正在尝试使用NSDates 创建一个NSPredicate 来查询我的核心数据数据库。我正在以一种将名为filterStringNSMutableString 拼凑在一起的方法形成谓词。 queryCount 是一个 NSInteger,用于跟踪附加了多少查询。在下面的块中,startendNSDates

if (start || end)
    {
        if (!queryCount)
        {
            [filterString appendString:@"("];
        }
        else
        {
            [filterString appendString:@" && ("];
        }

        // date range and exact date
        if (start && end)
        {
            [filterString appendFormat:@"%@ >= %@ && %@ <= %@", kTransactionFilterDateKey, start, kTransactionFilterDateKey, end];
        }
        // only start
        else if (start && !end)
        {
            [filterString appendFormat:@"%@ >= %@ && %@ <= %@", kTransactionFilterDateKey, start, kTransactionFilterDateKey, [NSDate distantFuture]];
        }
        // only end
        else if (end && !start)
        {
            [filterString appendFormat:@"%@ >= %@ && %@ <= %@", kTransactionFilterDateKey, [NSDate distantPast], kTransactionFilterDateKey, end];
        }

        [filterString appendString:@")"];

        queryCount++;
    }

当我到达形成实际谓词对象的块时(self.currentFilterString 指的是上述块来自的方法):

- (NSPredicate*)currentPredicate
{
    return [NSPredicate predicateWithFormat:self.currentFilterString];
}

我收到错误"Unable to parse the format string "(date &gt;= 2014-09-24 04:00:00 +0000 &amp;&amp; date &lt;= 4001-01-01 00:00:00 +0000)""

这是上面标记为//only start 的块的结果。其他块的结果相同。我尝试使用不同的日期值而不是 distantFuture,但这也没有任何改变。

我也尝试过类似"%@ BETWEEN %@", kTransactionFilterDateKey, @[start, end] 的变体,但它给了我同样的错误。

这是NSPredicate 使用日期的正确格式还是有其他方法?我在网上找到的所有内容都让我认为我只是将 NSDate 对象放入格式化的字符串中,就像我正在做的那样。

【问题讨论】:

  • 您可以尝试的一件事是创建多个单独的谓词并设置一个复合谓词:[NSCompoundPredicate andPredicateWithSubpredicates:@[pred1, pred2]];

标签: ios objective-c nsdate nspredicate


【解决方案1】:

我想通了。在比较日期时,NSPredicate 对键格式很挑剔。当我使用 %K 作为键手动创建谓词并将格式化的字符串直接放入 predicateWithFormat: 而不是 %@ 在我传入的已格式化字符串中时,它可以工作。所以我重新设计了我的解决方案,创建了一个以 %K 作为关键占位符的格式化字符串,并创建了一个可以传递给 predicateWithFormat:arguments 的参数数组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多