【问题标题】:CoreData: Move objects from one ArrayController to anotherCoreData:将对象从一个 ArrayController 移动到另一个
【发布时间】:2015-05-04 17:46:52
【问题描述】:

我有两个使用 Core Data 实体的NSArrayControllers,我想将某些索引处的对象(通过NSIndexSet)从一个 AC 移动到另一个 AC。通常这很容易,但这不是因为核心数据在它下面,如果我尝试它,它似乎会从源 AC 中删除对象,但不会将它们添加到目标 AC。我正在使用此代码:

extension NSIndexSet
{
    func toArray() -> [Int]
    {
        var indexes:[Int] = [];
        self.enumerateIndexesUsingBlock
            {
                (index:Int, _) in
                indexes.append(index);
        }
        return indexes;
    }
}

func moveIndicesToTargetAC(indexSet:NSIndexSet)
{
    let a = indexSet.toArray();
    for i in a
    {
        var obj:NSManagedObject = sourceArrayController?.arrangedObjects.objectAtIndex(i) as! NSManagedObject;
        targetArrayController?.addObject(obj);
        sourceArrayController?.removeObjectAtArrangedObjectIndex(i);
    }
}

我需要做什么才能让 Core Data 处理删除和添加?

【问题讨论】:

  • 不同的数组控制器是否使用相同的 NSManagedObjectContext 实例?如果不是,您可能必须从另一个 managedObjectContext 获取具有相同 managedObjectID 的对象。顺便说一句,数组控制器不是自己处理 managedObjectContext 吗?
  • 他们使用相同的 MOC。我想阵列控制器管理所有底层核心数据关系。我想我知道现在的问题是什么:这两个数组控制器管理不同种类的实体,即使它们具有相同的字段。这可能无法开箱即用。
  • 你试过从一个 NSArray 创建一个新的 NSArray 吗?在 objC 中它看起来像这样: [NSArray arrayWithArray: ]

标签: ios macos swift core-data nsarraycontroller


【解决方案1】:

感谢任何人的提示!我通过创建目标(NSManagedObject)实体的新对象并将所有数据传输到它来解决了这个问题。这确实是一个问题,因为两个 AC 的核心数据实体不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多