神奇的记录 - 在循环中向实体添加值

Posted

技术标签:

【中文标题】神奇的记录 - 在循环中向实体添加值【英文标题】:Magical Record - adding values to entity in loop 【发布时间】:2015-08-14 10:09:09 【问题描述】:

我的 Magical Record 代码有问题:

    Collection *collection = [Collection MR_createEntity];
    [collection setValue:name forKey:@"name"];
    [collection setValue:date forKey:@"date"];
    [collection setValue:amount forKey:@"amount"];

    for (Person *person in self.selectedPeople) 
        Payment *payment = [Payment MR_createEntity];
        [payment setValue:person forKey:@"person"];
        [payment setValue:collection forKey:@"collection"];
    

   [[NSManagedObjectContext MR_defaultContext]  MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) 
        if (!success)
            NSLog(@"Error: %@", [error localizedDescription]);
        else
            NSLog(@"Item %@ added to database", collection.name);
    ];

对于用户选择的每个人,我想在数据库中创建付款。我正在循环中这样做。我的问题是只有最后一次付款有收款。

例如,当我有 3 个人时,它看起来像这样:

Payment 1 - person:John, collection: nil
Payment 2 - person:Bill, collection: nil
Payment 3 - person:Mark, collection: Paper

谁能告诉我为什么会这样?

【问题讨论】:

【参考方案1】:

我的猜测是,这是从收款到付款的关系。您正在尝试使用从收款到付款的多对一,但您的核心数据模型中可能只有一对一设置。

我不确定从收款到付款的多对一关系是否是个好主意。您可能希望为每个集合创建一个唯一实体,但这完全取决于您的模型。

for (Person *person in self.selectedPeople) 
    // Create a new collection entity for each payment.
    Collection *collection = [Collection MR_createEntity];
    [collection setValue:name forKey:@"name"];
    [collection setValue:date forKey:@"date"];
    [collection setValue:amount forKey:@"amount"];

    Payment *payment = [Payment MR_createEntity];
    [payment setValue:person forKey:@"person"];
    [payment setValue:collection forKey:@"collection"];


[[NSManagedObjectContext MR_defaultContext]  MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) 
    if (!success)
        NSLog(@"Error: %@", [error localizedDescription]);
    else
        NSLog(@"Item %@ added to database", collection.name);
];

【讨论】:

我在核心数据模型中进行了一对一设置,现在一切正常,谢谢

以上是关于神奇的记录 - 在循环中向实体添加值的主要内容,如果未能解决你的问题,请参考以下文章

实体计数上的神奇记录 KVO

保存一对多实体时出现神奇记录异常

Jquery,在每个循环中向数组添加值

PHP试图在while循环中向数组添加值

如何在 for 循环中向 Pandas Dataframe 添加字符串值?

csharp 在C#中向数据库表添加记录