Проблема с базовыми данными - PullRequest
0 голосов
/ 25 августа 2009

У меня настроена базовая модель данных, с двумя сущностями в отношении один-ко-многим (Предметы, и для каждого предмета может быть несколько ResetDates). Я уверен, что модель настроена правильно.

Я могу добавить новые элементы, и при этом добавить новую ResetDate (используя текущую дату, с [NSDate date]). Я могу получить и отобразить элементы. У меня проблемы с получением и отображением ResetDates.

Обновлено : теперь работает, большое спасибо ответчикам ниже. Вот код вопроса:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"resetDate" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1];

NSMutableArray *sortedResets = [[NSMutableArray alloc] initWithArray:[item.resets allObjects]];
[sortedResets sortUsingDescriptors:sortDescriptors];

NSDate *oldDate = [[sortedResets lastObject] resetDate];
if ( !oldDate ) {
    oldDate = [NSDate date];
}

NSInteger numberOfDays = [self timeIntervalWithStartDate:oldDate withEndDate:currentDate];  // This function works fine, when given two NSDate objects

daysSinceLabel.text = [NSString stringWithFormat:@"%d days", numberOfDays];

Ответы [ 2 ]

3 голосов
/ 26 августа 2009

Во-первых, NSArray -objectAtIndex: не возвращает nil, если вы передадите ему индекс, выходящий за пределы, он поднимет NSRangeException, когда вы не уверены в индексе и вам нужно использовать -objectAtIndex:, для проверки необходимо вызвать метод -count.

Что еще более важно, NSArray не может содержать значение nil, поскольку nil не является объектом.

Тогда, нет, это не NSDate объект, когда вы спрашиваете item, что он сбрасывает отношения (item.resets), вы получаете NSSet, который содержит Reset управляемые объекты взамен, а не NSDate objects, вам нужен атрибут resetDate возвращаемых Reset управляемых объектов, может быть что-то вроде этого:

// NSArray -lastObject method return nil if the array is empty
// Sending messages to nil is Ok there, so we can call resetDate directly

NSDate *oldDate = [[sortedResets lastObject] resetDate];
if ( !oldDate ) {
    oldDate = [NSDate date];
}

Надеюсь, что поможет, и что мой английский понятен ...

1 голос
/ 25 августа 2009

Возможно замена:

NSDate *oldDate = sortedResets[0];

с:

NSDate *oldDate = [sortedResets objectAtIndex:0];

поможет. sortedResets - это объект NSArray, а не массив C;)

...