2015-05-04 94 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的核心數據實體是不同的。

相關問題