Ok, ich suchte und versuchte in diesem Fall für die letzten 1-2 Wochen und ich habe es nicht funktionieren. Ich würde erreichen können, was ich ohne NSFRC erreichen möchte, aber aus Leistungsgründen und Bequemlichkeit möchte ich es mit der NSFRC machen. So habe ich ein Datenmodell mit 2 Einheiten - NSFetchedResultsController und to-many Beziehung funktioniert nicht
Es das Bild sieht, ist ein Konto und ein Konto kann vielen accountchanges hat - was ganz offensichtlich. Also ich möchte in der Lage sein, einen Account zu wählen und dann alle AccountChanges für diesen bestimmten Account zu zeigen. Bisher war es mir möglich, den Account zu bekommen und auch auf den NSSet in der cellForRow-Funktion zuzugreifen, aber ich bekomme nicht die richtigen Sektionen und numberOfRowsInSection - das ist das Hauptproblem. Hier
ist ein Code:
func numberOfSections(in tableView: UITableView) -> Int {
print("Sections : \(self.fetchedResultsController.sections?.count)")
if (self.fetchedResultsController.sections?.count)! <= 0 {
print("There are no objects in the core data - do something else !!!")
}
return self.fetchedResultsController.sections?.count ?? 0
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("Section Name")
print(self.fetchedResultsController.sections![section].name)
let sectionInfo = self.fetchedResultsController.sections![section]
print("Section: \(sectionInfo) - Sections Objects: \(sectionInfo.numberOfObjects)")
return sectionInfo.numberOfObjects
}
Es gibt einige Druckanweisungen, die nur zur Information!
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let myCell = myTable.dequeueReusableCell(withIdentifier: "myCell")! as UITableViewCell
let accountBalanceChanges = self.fetchedResultsController.object(at: indexPath)
print("AccountBalanceChanges from cell....")
print(accountBalanceChanges)
let details = accountBalanceChanges.accountchanges! as NSSet
print("Print out the details:")
print(details)
let detailSet = details.allObjects
let detailSetItem = detailSet.count // Just for information!
let myPrint = detailSet[indexPath.row] as! AccountChanges
let myVal = myPrint.category
myCell.textLabel?.text = myVal
return myCell
}
Also, ich bin in der Lage, die Daten zu bekommen, aber immer nur ein Element und nicht das ganze Set - ich denke, aufgrund der Tatsache, dass die Abschnitte/numberOfRows falsch ist.
Hier ist meine NSFRC
var fetchedResultsController: NSFetchedResultsController<Accounts> {
if _fetchedResultsController != nil {
return _fetchedResultsController!
}
let fetchRequest: NSFetchRequest<Accounts> = Accounts.fetchRequest()
// Set the batch size to a suitable number.
fetchRequest.fetchBatchSize = 20
// Edit the sort key as appropriate.
let sortDescriptor = NSSortDescriptor(key: "aName", ascending: false)
fetchRequest.sortDescriptors = [sortDescriptor]
let predicate = NSPredicate(format: "(ANY accountchanges.accounts = %@)", newAccount!)
fetchRequest.predicate = predicate
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.coreDataStack.context, sectionNameKeyPath: nil, cacheName: nil)
aFetchedResultsController.delegate = self
_fetchedResultsController = aFetchedResultsController
do {
try _fetchedResultsController!.performFetch()
} catch {
// Replace this implementation with code to handle the error appropriately.
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
return _fetchedResultsController!
}
Ich gehe davon aus es die SortDescriptor oder das Prädikat - oder vielleicht beides?
Irgendwelche Hilfe oder mindestens Richtungen werden gut geschätzt. Ich habe schon viele verschiedene Ansätze ausprobiert, aber keine gab mir die richtigen Ergebnisse.
Ein weiterer Kommentar, ich viele verschiedene Wege in SortDescriptor und im Prädikat/oder der sectionNameKeyPath von NSFRC versucht - die meisten Fehlermeldung sind: „zu viele Schlüssel ist hier nicht erlaubt“ oder "keypath for (category, title ...) existiert nicht" Von obigem Code scheint das Prädikat zu funktionieren, aber der SortDescriptor gibt mir die meisten Probleme ... mein Tipp –