Sto costruendo un'app utilizzando Swift con Core Data. A un certo punto nella mia app, voglio avere un UITableView
mostrare tutti gli oggetti di un tipo attualmente nel negozio permanente. Attualmente li sto recuperando e mostrandoli nella vista tabella utilizzando un NSFetchedResultsController
. Voglio che la vista tabella per essere ordinata da una proprietà calcolata del mio NSManagedObject
sottoclasse, che assomiglia a questo:Ordinamento NSFetchedResultsController di Swift Computed Property su NSManagedObjectSubclass
class MHClub: NSManagedObject{
@NSManaged var name: String
@NSManaged var shots: NSSet
var averageDistance: Int{
get{
if shots.count > 0{
var total = 0
for shot in shots{
total += (shot as! MHShot).distance.integerValue
}
return total/shots.count
}
else{
return 0
}
}
}
A mio controller della vista tabella, sto installando l' fetchRequest
miei NSFetchedResultsController
come segue:
let request = NSFetchRequest(entityName: "MHClub")
request.sortDescriptors = [NSSortDescriptor(key: "averageDistance", ascending: true), NSSortDescriptor(key: "name", ascending: true)]
la sua creazione come questo fa sì che la mia applicazione di crash con il seguente messaggio nel registro:
'NSInvalidArgumentException', reason: 'keypath averageDistance not found in entity <NSSQLEntity MHClub id=1>'
Quando prendo la primo descrittore di ordinamento, la mia app funziona bene, ma la mia vista tabella non è ordinata esattamente come voglio che sia. Come posso ordinare la vista tabella in base a una proprietà calcolata di una sottoclasse NSManagedObject
in Swift?
Una richiesta di recupero dei dati principali * non può * ordinare su una proprietà calcolata, solo su proprietà memorizzate persistenti. Confronta (ad esempio) http://stackoverflow.com/questions/13325849/sorting-on-transient-fields-with-nsfetchedresultcontroller. –
Inoltre, il tuo "totale" viene interpretato come int, quindi la media sarà errata. Per esempio. colpi 1,1,3 = 5/3 = 1. – Mundi