2015-05-04 98 views
0

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

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考虑删除和添加?

+0

不同的数组控制器使用NSManagedObjectContext的相同实例吗?如果不是,您可能必须从其他managedObjectContext获取具有相同managedObjectID的对象。顺便说一句,不是数组控制器自己处理managedObjectContext? – Sandeep

+0

他们使用相同的MOC。我想阵列控制器管理所有的基础核心数据关系。我想我知道现在的问题:两个阵列控制器管理不同种类的实体,即使它们具有相同的字段。这可能无法正常工作。 – BadmintonCat

+0

您是否尝试过从NSArray创建新的NSArray?在objC中,它看起来像这样:[NSArray arrayWithArray:] –

回答

0

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

相关问题