2016-04-05 4 views
0
func fetchCD() -> [Entity] { 

    var options : [Entity] = [] 
    let fetchRequest = NSFetchRequest(entityName:"EntityName") 

    do { 
    options = try cdh.managedObjectContext.executeFetchRequest(fetchRequest) as! [Entity] 
    } catch let error as NSError { 
    print("Fetch failed: \(error.localizedDescription)") 
    } catch { 

    } 

    //here I'd like to order by Entity.types.counter (desc) 

    return options 
} 

//Entity+CoreDataProperties.swift 
extension Entity { 
    //my values 
    @NSManaged var types: NSSet? 
} 


//Type+CoreDataProperties.swift 

extension Type { 

@NSManaged var counter: NSNumber 

} 

Как бы я отсортировал массив [Entity] на conter, который является свойством объекта типа (имеет много отношений с Entity)?быстрый массив сортировки объектов со многими отношениями

ответ

0

Если его доступное значение, вы можете использовать sortInPlace, чтобы отсортировать массив.

Вы просто должны указать, как получить доступ к значению, и как его сравнить, я думаю, вы можете просто называть это, проверьте, помогает ли он вам.

options.sortInPlace({ $0.types.counter < $1.types.counter }) 
+0

Спасибо, я получаю: 'Значение типа NSSet? не имеет счетчика участников ' –

+0

Как вы получаете доступ к значению счетчика? просто измените в блоке, и он должен работать – UlyssesR

0

Короткий ответ: вы не можете, потому что это не имеет никакого смысла. Вы хотите отсортировать один объект на основе многих объектов.

Теперь, если вы хотите отсортировать EntityName на основе самого высокого Type или самого большого Type, тогда это был бы другой вопрос и разрешимая проблема.

Для сортировки требуется последовательный ответ на вопрос "значение". Какое значение должно быть определено EntityName, когда проверяются многие объекты Type?

Должно ли оно быть основано на количестве Type объектов? Это можно было бы отсортировать.

Должно ли оно быть основано на существовании Type объектов? Это тоже можно было бы отсортировать.

Вы также можете включить, что вокруг и получать все объекты Type сущностей, сортировать их на основе counter, а затем извлечь EntityName объект, который связан с Type объекта после завершения сортировки. Тогда ваш код будет выглядеть следующим образом:

func fetchCD() -> [Entity] { 

    let fetchRequest = NSFetchRequest(entityName:"Type") 
    fetchRequest.sortDescriptors = [NSSortDescriptor("counter", ascending: true)] 

    do { 
    let results = try cdh.managedObjectContext.executeFetchRequest(fetchRequest) as! [Type] 
    let options = results.map($0.entity) as! [Entity] 
    //Type is already sorted 
    return options 
    } catch { 
    fatalError("Fetch failed: \(error)") 
    } 
} 

Этот код НЕ 100%, как у меня нет доступа к вашему проекту, и я бы не назвал свои объекты, как это. Но для демонстрационных целей он показывает вам вариант.

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