我正在开发一个应用程序,其中我使用核心数据框架来维护数据库。我的实体包含三个称为属性的属性:名称,应用程序列表的开始时间和结束时间。我正在获取名称和开始时间属性的正确值。
现在我的问题是我的结束时间属性应包含下一个条目的开始时间值。如果有人对此有任何想法,请告诉我。
谢谢
最佳答案
您可以将endTime属性留为空白,直到创建下一个实体。在实体的+ Create类别中,获取最后一个/第一个对象(假设您正在使用有序实体),并使用与新的startTime相同的值更新endTime。
如果您的对象未排序,则可能会有些棘手,因为所有实体都在集合中。但是如果订购的话,您会很好,因为NSOrderedSet响应lastObject(和firstObject)。
请享用,
达米安
编辑:这是一个示例工厂方法,其中1)返回一个股票代号的现有股票实体,或者2)为该代号创建一个新实体。很容易修改以获取实体并根据您的排序顺序选择第一个/最后一个。再次参见Hegarty教授的核心数据类。
+ (Stock *)stockForSymbol:(NSString *)symbol inManagedObjectContext:(NSManagedObjectContext *)context {
Stock *stock = nil;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Stock"];
request.predicate = [NSPredicate predicateWithFormat:@"symbol = %@",symbol];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"symbol" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSError *error = nil;
NSArray *matches = [context executeFetchRequest:request error:&error];
if (!matches || [matches count] > 1) {
// handle error
} else if ([matches count] == 0) {
stock = [NSEntityDescription insertNewObjectForEntityForName:@"Stock" inManagedObjectContext:context];
stock.symbol = symbol;
stock.strategyPosition = [NSNumber numberWithInt:StrategyPositionFlat];
stock.userPosition = stock.strategyPosition;
stock.userOwns = [NSNumber numberWithBool:NO];
} else {
stock = [matches lastObject];
}
return stock;
}