我正在开发一个应用程序,其中我使用核心数据框架来维护数据库。我的实体包含三个称为属性的属性:名称,应用程序列表的开始时间和结束时间。我正在获取名称和开始时间属性的正确值。
现在我的问题是我的结束时间属性应包含下一个条目的开始时间值。如果有人对此有任何想法,请告诉我。

谢谢

最佳答案

您可以将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;
}

10-07 19:51
查看更多