2016-09-22 74 views
0

在CoreData中設置「To Many」關係並勾選「Ordered」框將您的屬性定義爲NSOrderedSet。在CoreData的NSOrderedSet中的特定位置插入一個對象?

有沒有一種有效的方法來在特定位置插入對象或上下移動對象?

或者我需要用NSOrderedSet的數據創建一個NSMutabledOrderedSet,插入或移動我的對象,然後將其轉換回NSOrderedSet?

或者我應該使用標準的NSSet並自己管理'position'屬性?

回答

0

CoreData'創建NSManagedObject子類...'將生成很多方法供您使用來操作您的有序集。或者你也可以用Codegen做同樣的事情。

目標C

@interface MyObject (CoreDataGeneratedAccessors) 

- (void)insertObject:(NSManagedObject *)value inItemsAtIndex:(NSUInteger)idx; 
- (void)removeObjectFromItemsAtIndex:(NSUInteger)idx; 
- (void)insertItems:(NSArray<NSManagedObject *> *)value atIndexes:(NSIndexSet *)indexes; 
- (void)removeItemsAtIndexes:(NSIndexSet *)indexes; 
- (void)replaceObjectInItemsAtIndex:(NSUInteger)idx withObject:(NSManagedObject *)value; 
- (void)replaceItemsAtIndexes:(NSIndexSet *)indexes withItems:(NSArray<NSManagedObject *> *)values; 
- (void)addItemsObject:(NSManagedObject *)value; 
- (void)removeItemsObject:(NSManagedObject *)value; 
- (void)addItems:(NSOrderedSet<NSManagedObject *> *)values; 
- (void)removeItems:(NSOrderedSet<NSManagedObject *> *)values; 

@end 

斯威夫特

// MARK: Generated accessors for items 
extension MyObject { 

    @objc(insertObject:inItemsAtIndex:) 
    @NSManaged public func insertIntoItems(_ value: NSManagedObject, at idx: Int) 

    @objc(removeObjectFromItemsAtIndex:) 
    @NSManaged public func removeFromItems(at idx: Int) 

    @objc(insertItems:atIndexes:) 
    @NSManaged public func insertIntoItems(_ values: [NSManagedObject], at indexes: NSIndexSet) 

    @objc(removeItemsAtIndexes:) 
    @NSManaged public func removeFromItems(at indexes: NSIndexSet) 

    @objc(replaceObjectInItemsAtIndex:withObject:) 
    @NSManaged public func replaceItems(at idx: Int, with value: NSManagedObject) 

    @objc(replaceItemsAtIndexes:withItems:) 
    @NSManaged public func replaceItems(at indexes: NSIndexSet, with values: [NSManagedObject]) 

    @objc(addItemsObject:) 
    @NSManaged public func addToItems(_ value: NSManagedObject) 

    @objc(removeItemsObject:) 
    @NSManaged public func removeFromItems(_ value: NSManagedObject) 

    @objc(addItems:) 
    @NSManaged public func addToItems(_ values: NSOrderedSet) 

    @objc(removeItems:) 
    @NSManaged public func removeFromItems(_ values: NSOrderedSet) 

} 

否則肯定的只是做一個可變的副本,必要時操作,然後將它放回NSManagedObject。順便說一句,你不需要將其轉換回非可變集合要麼

+0

請你說清楚這些方法生成在哪裏?他們似乎不適合我的屬性。我使用的是Swift,屬性聲明如下: 'code' @ NSManaged var elements:NSOrderedSet? 如果我開始輸入以下內容,它不會自動完成: elements.insert – Duzmac

+0

它們將在swift中命名不同,核心數據將生成YourClass + CoreDataProperties.swift它們將在那裏 – trapper

+0

Class + CoreDataProperties.swift已經生成的只有屬性。沒有辦法。我正在使用iOS btw。 – Duzmac

相關問題