【问题标题】:EXC_BAD_ACCESS when building nspredicate构建 nspredicate 时的 EXC_BAD_ACCESS
【发布时间】:2014-06-29 21:40:04
【问题描述】:

我正在计算生日和今天之间的月数。 有了这个数字,我正在构建一个谓词来从核心数据中获取对象。 虽然月数计算正确(如日志所示),但在构建谓词时我得到了 EXC_BAD_ACCESS。

这是我的代码:

    NSCalendar *gregorian = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSGregorianCalendar];

    NSUInteger unitFlags = NSMonthCalendarUnit;

    NSDateComponents *components = [gregorian components:unitFlags
                                            fromDate:birthdate
                                              toDate:today options:0];
    int months = [components month];
    NSLog(@"months: %ld", (long)months);
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"(alter_min_monat > %@)", months];

为什么会这样?

【问题讨论】:

  • %@int?请改用%d

标签: ios nspredicate exc-bad-access


【解决方案1】:

问题在于占位符,不是直接使用NSPredicate,而是使用内部调用的initWithFormat:

%@ 不应与 int 一起使用,而应使用 %d

所以这一行:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"(alter_min_monat > %@)", months];

应该是:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"(alter_min_monat > %d)", months];

其他链接信息:String Programming Guide: String Format Specifiers

【讨论】:

    猜你喜欢
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 2011-02-08
    • 2012-04-04
    • 2015-04-21
    • 1970-01-01
    相关资源
    最近更新 更多