核心数据日期问题

时间:2009-08-25 00:26:49

标签: iphone cocoa-touch core-data nsdate

我已经建立了一个核心数据模型,其中两个实体具有一对多关系(项目,并且对于每个项目,可以有多个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 个答案:

答案 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数组;)

相关问题