更新核心数据的特定属性

时间:2012-02-27 13:33:30

标签: ios core-data ios5

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

由于

1 个答案:

答案 0 :(得分:0)

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