2016-06-04 14 views

Antwort

0

Apple is clear dass "Die Reihenfolge der Objekte im Array ist undefiniert." Ich würde also erwarten, dass sich das ändern könnte.

Ich würde empfehlen, dass Sie das Array allObjects in eine Instanzvariable speichern und damit numberOfSectionsInTableView() und die anderen Datenquellenmethoden implementieren.

Sie können auch Ihre NSFetchedResultsController in einer Instanzvariablen speichern und sicher gerne nutzen:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    var rows = 0 
    if self.fetchedResultsController!.sections!.count > 0 { 
     let sectionInfo = getSectionInfo(section) 
     rows = sectionInfo!.numberOfObjects 
    } 
    return rows 
} 

override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    let sectionInfo = getSectionInfo(section) 
    return sectionInfo!.name 
} 

func getSectionInfo(section: Int) -> NSFetchedResultsSectionInfo? { 
    var sections: [AnyObject] = self.fetchedResultsController!.sections! 
    if section < sections.count { 
     let x = sections[section] as! NSFetchedResultsSectionInfo 
     return x 
    } 
    return nil 
} 

override func tableView(tableView: UITableView, sectionForSectionIndexTitle title: String, atIndex index: Int) -> Int { 
    return self.fetchedResultsController!.sectionForSectionIndexTitle(title, atIndex: index) 
} 

override func sectionIndexTitlesForTableView(tableView: UITableView) -> [String]? { 
    return self.fetchedResultsController!.sectionIndexTitles 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("YourCellIdentifier")! as UITableViewCell 

    // Use your own NSManagedObject class here...mine is Category 
    let category = self.fetchedResultsController.objectAtIndexPath(indexPath) as! Category 
    return cell 
} 

Persönlich habe ich alle oben genannten Verfahren in einer Basisklasse codiert, dass ich wieder verwenden, so kann ich implementieren nur die cellForRowAtIndexPath() in jeder neuen Tabellenansicht. Ich postete a copy on github für den Fall, dass es für jemand anderen nützlich sein könnte.

+0

Danke für die Hilfe! Aber ich habe einen Zweifel, wird allobjects() -Methode das Array in der gleichen Reihenfolge zurückgeben, wie es NSSet hinzugefügt wurde. –

+0

Ich habe den ersten Absatz hinzugefügt. 'allObjects()' order ist undefiniert, also würde ich erwarten, dass es sich ändern kann. – user212514

Verwandte Themen