0

我已经设置了一个核心数据模型,其中两个实体处于一对多关系(项目,并且对于每个项目,可以有多个重置日期)。我非常有信心模型设置正确。

我可以添加新项目,然后添加新的 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];
4

2 回答 2

3

首先,如果您传递一个超出范围的索引,它NSArray -objectAtIndex:不会返回,它会引发一个,当您不确定索引并需要使用时,您必须调用该方法之前进行检查。nilNSRangeException-objectAtIndex:-count

更重要的是, anNSArray不能包含nil值,因为nil它不是对象。

那么,不,它不是一个NSDate对象,当你要求item它重置关系(item.resets)时,你会得到一个NSSet包含Reset托管对象作为回报,而不是NSDate对象,你想要的是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];
}

希望对您有所帮助,并且我的英语可以理解...

于 2009-08-26T18:05:37.777 回答
1

也许更换:

NSDate *oldDate = sortedResets[0];

和 :

NSDate *oldDate = [sortedResets objectAtIndex:0];

会有所帮助。sortedResets 是一个 NSArray 对象,而不是 C 数组;)

于 2009-08-25T13:28:12.787 回答