我已经建立了一个核心数据模型,其中两个实体具有一对多关系(项目,并且对于每个项目,可以有多个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];
答案 0 :(得分:3)
首先,NSArray -objectAtIndex:
没有返回nil
如果你传递一个超出界限的索引,当你不确定索引时它会引发NSRangeException
,并且需要使用-objectAtIndex:
,您必须先调用-count
方法才能检查。
更重要的是,NSArray
不能包含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];
}
希望有所帮助,而且我的英语是可以理解的......
答案 1 :(得分:1)
也许替换:
NSDate *oldDate = sortedResets[0];
with:
NSDate *oldDate = [sortedResets objectAtIndex:0];
会有所帮助。 sortedResets是一个NSArray对象,而不是C数组;)