2016-09-22 3 views
0

Настройка отношения «Для многих» в CoreData и установка флажка «Заказ» определяет ваш атрибут как NSOrderedSet.Вставить объект в определенную позицию в NSOrderedSet в CoreData?

Есть ли эффективный способ вставки объекта в определенную позицию или для перемещения объекта вверх и вниз?

Или мне нужно создать NSMutabledOrderedSet с данными из NSOrderedSet, вставить или перенести мои объекты, а затем преобразовать их обратно в 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 

Swift

// 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

Класс + CoreDataProperties.swift, который был создан только с атрибутами. Нет методов. Я использую iOS btw. – Duzmac

Смежные вопросы