CoreData 实体获取请求
CoreData Entity Fetch Request
我有一个名为 TimeInterval
的实体,它的唯一属性是 startDate
和 finishDate
,它们的类型是日期。我显然不需要添加另一个名为 totalTime
的属性,因为可以通过以下方式计算:[finishDate timeIntervalSinceDate: startDate]
我可以为属性 totalTime
创建提取的 属性 吗?如果不是,那么最好的方法是什么,而不必将 totalTime 添加为属性,因为这似乎是多余的。
顺便说一下,我是 Core-Data 的新手。
我可以为属性 totalTime 创建一个提取的 属性 吗?如果不是,那么最好的方法是什么,而不必将 totalTime 添加为属性,因为这似乎是多余的。
我的回答是:
不,您不应该创建其获取的 属性,因为您不想将其作为实体的属性,因此您只需创建一个方法让我们说
-(NSTimeInterval) getTotalTimeWithStartDate:(NSDate *)startDate withFinishDate:(NSDate *)finishDate{
NSTimeInterval interval = [startDate timeIntervalSinceDate:finishDate];
return interval;
}
//然后使用
调用这个方法
[self getTotalTimeWithStartDate:startDate withFinishDate:finishDate];
为了对相同table的不同列进行数学计算,我们基本上使用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]
使用获取的属性似乎不适合我的情况。 TimeInterval
上的一个简单类别就可以解决问题:
@implementation TimeInterval (Extras)
-(NSTimeInterval)intervalTime
{
return [self.finisheDateTime timeIntervalSinceDate: self.startDateTime];
}
@end
您可以使用单独的 属性(如果您愿意,也可以使用完整的瞬态属性)。
考虑这样的事情...
@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
我有一个名为 TimeInterval
的实体,它的唯一属性是 startDate
和 finishDate
,它们的类型是日期。我显然不需要添加另一个名为 totalTime
的属性,因为可以通过以下方式计算:[finishDate timeIntervalSinceDate: startDate]
我可以为属性 totalTime
创建提取的 属性 吗?如果不是,那么最好的方法是什么,而不必将 totalTime 添加为属性,因为这似乎是多余的。
顺便说一下,我是 Core-Data 的新手。
我可以为属性 totalTime 创建一个提取的 属性 吗?如果不是,那么最好的方法是什么,而不必将 totalTime 添加为属性,因为这似乎是多余的。
我的回答是: 不,您不应该创建其获取的 属性,因为您不想将其作为实体的属性,因此您只需创建一个方法让我们说
-(NSTimeInterval) getTotalTimeWithStartDate:(NSDate *)startDate withFinishDate:(NSDate *)finishDate{
NSTimeInterval interval = [startDate timeIntervalSinceDate:finishDate];
return interval;
}
//然后使用
调用这个方法[self getTotalTimeWithStartDate:startDate withFinishDate:finishDate];
为了对相同table的不同列进行数学计算,我们基本上使用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]
使用获取的属性似乎不适合我的情况。 TimeInterval
上的一个简单类别就可以解决问题:
@implementation TimeInterval (Extras)
-(NSTimeInterval)intervalTime
{
return [self.finisheDateTime timeIntervalSinceDate: self.startDateTime];
}
@end
您可以使用单独的 属性(如果您愿意,也可以使用完整的瞬态属性)。
考虑这样的事情...
@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