构建nspredicate时EXC_BAD_ACCESS

时间:2014-05-12 13:34:20

标签: ios nspredicate exc-bad-access

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

为什么会这样?

1 个答案:

答案 0 :(得分:42)

问题是占位符,而不是直接使用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