Вопрос

Вот мой код:

for (NSManagedObject *object in array) {
    if ([[object valueForKey:@"DueDate"] isLessThan:[NSDate date]]) {
        count++;
        NSLog(@"Looped");
        NSString *test = [[NSString alloc] initWithFormat:@"%@", [object valueForKey:@"DueDate"]];
        NSLog(@"%@", test);
    }
}
NSLog(@"%i", count);
NSDockTile *aTitle = [[NSApplication sharedApplication] dockTile];
[aTitle setBadgeLabel:[NSString stringWithFormat:@"%i", count]];

По какой-то причине этот код добавляет 8 к значку dock, когда оно должно быть 2

Это было полезно?

Решение

На каком основании вы утверждаете, что это должно быть 2?У вас явно есть восемь объектов в массиве, срок выполнения которых меньше текущей даты (кстати, для которой вы создаете новый объект каждый раз в цикле).

Каков класс значений этих управляемых объектов ' DueDate собственность?(Не смотрите на свою модель для этого — отправьте значения даты выполнения class сообщения и регистрируйте результаты с помощью NSLog.) Вполне возможно, что они не являются NSDates, и что их compare: метод заключается в том, что вместо того, чтобы выдавать исключение при запросе сравнения с NSDate, просто возвращает бессмыслицу.

Кроме того, почему бы не включить этот тест is-less-than-X-date в качестве предиката в запросе на выборку, который вы используете для получения этих объектов?Затем (убедившись, что значения даты выполнения являются NSDates) вы могли бы просто использовать count из массива.Это предполагает, конечно, что вы не делаете что-то еще с большим результирующим массивом за пределами кода, который вы показали.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top