2

CoreData で「To Many」関係を設定し、「Ordered」ボックスにチェックを入れると、属性が NSOrderedSet として定義されます。

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

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

それとも、標準の NSSet を使用して「位置」属性を自分で管理する必要がありますか?

4

1 に答える 1

1

CoreData 'Create NSManagedObject Subclasses...' は、順序付けられたセットを操作するために使用する多くのメソッドを生成します。または、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 に戻します。ところで、変更不可能なセットに戻す必要はありません

于 2016-09-23T04:51:35.880 に答える