构建nspredicate时EXC_BAD_ACCESS

mrd*_*mrd 13 exc-bad-access nspredicate ios

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

为什么会这样?

Lar*_*rme 45

问题是占位符,而不是NSPredicate直接initWithFormat:占据,但内部称为占位符.

%@不应该与a一起int使用,%d而是使用.

所以这一行:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"(alter_min_monat > %@)", months];
Run Code Online (Sandbox Code Playgroud)

应该:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"(alter_min_monat > %d)", months];
Run Code Online (Sandbox Code Playgroud)

其他链接信息:字符串编程指南:字符串格式说明符