2012-02-27 45 views
1

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

感谢

回答

0

你可以离开了结束时间属性留空。在实体上的+ 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; 
} 
+0

那么我需要创建托管对象上下文的实例两次? – NNR 2012-02-28 12:54:35

+0

绝对不是 - 你做的是在创建第二个时检索第一个。我将在一分钟内附上一个代码示例,但我了解到的这个地方是Paul Hegarty在斯坦福“iPad和iPhone应用程序开发”课程中的两个核心数据类。这些经验教训至关重要,他解释了核心数据实体的所有类别和工厂方法。我会发布一个简单的。 – 2012-02-28 15:23:03

+0

非常感谢。 – NNR 2012-03-02 04:48:51