2016-09-22 8 views
0

CoreDataに "To Many"リレーションシップを設定し、 "Ordered"ボックスを選択すると、属性がNSOrderedSetとして定義されます。CoreDataのNSOrderedSetの特定の位置にオブジェクトを挿入しますか?

オブジェクトを特定の位置に挿入するか、オブジェクトを上下に移動する効率的な方法はありますか?

NSOrderedSetのデータを使用してNSMutabledOrderedSetを作成し、オブジェクトを挿入または移動してからNSOrderedSetに変換する必要がありますか?

標準のNSSetを使用し、自分で 'position'属性を管理する必要がありますか?

答えて

0

CoreData 'NSManagedObjectサブクラスを作成...'では、順序付きセットを操作するための多くのメソッドが生成されます。 Codegenでも同じことができます。

のObjective 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にそれを設定し、必要に応じて操作し、変更可能なコピーを作成します。 btw、それを変更不可能なセットに戻す必要はありません

+0

これらのメソッドはどこに生成されているのかを教えてください。彼らは私の属性に利用可能ではないようです。私はSwiftを使用しており、属性は次のように宣言されています。 'code' @ NSManaged var elements:NSOrderedSet? 次のように入力を開始すると自動的には完了しません。 elements.insert – Duzmac

+0

迅速にコアデータが名前が付けられ、YourClass + CoreDataProperties.swiftが生成されます。 – trapper

+0

Class + CoreDataProperties.swift生成されたのは属性のみです。方法はありません。私はiOS btwを使用しています。 – Duzmac

関連する問題