更新包含许多值的核心数据对象

时间:2014-08-06 04:29:37

标签: ios objective-c core-data

我在核心数据中使用一对多关系数据库,用于专注于田径运动的iOS应用。

每个运动会话至少有4个与其相关联的“smartData”对象。随着时间的推移,创建了更多的smartData对象(可能超过一百个)。 “smartData”对象是日期+分数(双倍)。

我想知道如何更新与上次会话相关的所有分数。当我尝试使用for循环并且没有遇到崩溃时,它只替换了一组得分,显然,我想用另一组得分替换一组得分。

//获取会话和相关分数

// Fetch core data in the background and get the last session

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MMASession"];
NSArray *results = [[TBCoreDataStoreS1 privateQueueContext] executeFetchRequest:fetchRequest
                                                                          error:nil];



self.lastMMASession = [results lastObject];

NSManagedObject *smartDataOfLastSession = [lastSession valueForKey:@"smartData"];

到目前为止,我了解所有事情。我有上一次会话的smartData,但我不知道如何替换整套分数。我有一个名为newScores的NSArray属性,它包含一组新的值。

for (int i = 0; i < [self.newScores count]; i++) {
    [smartDataOfLastSession setValue:self.smartScores[i] forKey:@"smartScore"];
 }

充其量,此方法会替换一个值的值集。我理解我的错误,但任何人都可以指出我的解决方案,这将是伟大的。

1 个答案:

答案 0 :(得分:2)

您应该创建自己的NSManagedObject子类。

在我的情况下,我有一个xcdatamodel如下。

enter image description here

然后,您可以通过NSManagedObject

创建Xcode's File > New > File子类

enter image description here

现在,您拥有NSManagedObject子类,并且向导提供了您需要的实例方法。

enter image description here

如您所见,User.gamble是一种具有allObject方法的NSSet类型。

enter image description here

您可以使用[user.gamble allObject]获取所有赌博。

以下是我的案例:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:self.managedObjectContext];
[request setEntity:entity];

NSArray *result = [self.managedObjectContext executeFetchRequest:request error:&error];
for(User *user in result)
{
    for(Gamble *gamble in [user.gamble allObjects])
    {
        // DO SOMETHING HERE
    }
}

在您的情况下,它将是[session.smartData allObject]