0

我有一个名为的实体TimeInterval,其唯一属性是 astartDatefinishDate,它们的类型是 Date。我显然不需要添加另一个名为的属性,totalTime因为可以通过以下方式计算:[finishDate timeIntervalSinceDate: startDate]

我可以为属性创建一个获取的属性totalTime吗?如果不是,那么最好的方法是什么,而不必添加 totalTime 作为属性,因为这似乎是多余的。

顺便说一句,我是 Core-Data 的新手。

4

4 回答 4

1

您可以使用单独的属性(如果您愿意,也可以使用完整的瞬态属性)来执行此操作。

考虑这样的事情......

@interface Item : NSManagedObject
@property (nonatomic, readonly, assign) NSTimeInterval totalTime;
@end


@implementation Item
- (NSTimeInterval)totalTime
{
    [self willAccessValueForKey:@"totalTime"];
    NSDate *finishDate = [self primitiveFinishDate];
    NSDate *startDate = [self primitiveStartDate];
    NSTimeInterval result = [finishDate timeIntervalSinceDate: startDate];
    [self didAccessValueForKey:@"totalTime"];
    return result;
}
@end
于 2015-08-26T01:25:18.470 回答
0

我可以为属性 totalTime 创建一个获取的属性吗?如果不是,那么最好的方法是什么,而不必添加 totalTime 作为属性,因为这似乎是多余的。

我的回答是:不,你不应该创建它的 fetched 属性,因为你不希望它作为你的实体的属性,所以你只需要创建一个方法让我们说

-(NSTimeInterval) getTotalTimeWithStartDate:(NSDate *)startDate withFinishDate:(NSDate *)finishDate{
NSTimeInterval interval = [startDate timeIntervalSinceDate:finishDate];
return interval;

}

//然后调用这个方法使用

[self getTotalTimeWithStartDate:startDate withFinishDate:finishDate];
于 2015-08-25T02:30:58.763 回答
0

为了对同一张表的不同列进行数学计算,我们基本上使用 NSExpressionDescription,并将其设置为 NSFetchRequest,如下所示:

NSExpressionDescription *expressionDesc = [[NSExpressionDescription alloc] init];
[expressionDesc setName:@"totalTime"];
NSExpression *expression = [NSExpression expressionForFunction:@"multiply:by:"
                                                    arguments:@[[NSExpression expressionForKeyPath:@"startDate"],
                                                               [NSExpression expressionForKeyPath:@"finishDate"]];
[expressionDesc setExpression:expression];
[expressionDesc setExpressionResultType:NSInteger64AttributeType];

fetchRequest.propertiesToFetch = @[expressionDesc]
于 2015-08-25T03:20:07.927 回答
0

似乎使用获取的属性不适用于我的情况。一个简单的类别就TimeInterval可以了:

@implementation TimeInterval (Extras)

-(NSTimeInterval)intervalTime
{
    return [self.finisheDateTime timeIntervalSinceDate: self.startDateTime];
}

@end
于 2015-08-25T05:47:18.493 回答