NSFetchedResultsController insere a mesma célula em duas seções somente quando o controlador está prestes a inserir outra seção

Este é meuMessage.swift Arquivo:

@objc(Message)
class Message: NSManagedObject {

    @NSManaged var content: String
    @NSManaged var createdAt: NSDate
    @NSManaged var identifier: Int64

    @NSManaged var conversation: Conversation

    @NSManaged var sender: Contributor

    var normalizedCreatedAt: NSDate {
        return createdAt.dateWithDayMonthAndYearComponents()!
    }
}

É assim que eu configuro meu FRC:

private func setupFetchedResultsController() {

    let context = NSManagedObjectContext.MR_defaultContext()
    let fetchRequest = NSFetchRequest(entityName: "Message")
    let createdAtDescriptor = NSSortDescriptor(key: "createdAt", ascending: true)

    fetchRequest.predicate = NSPredicate(format: "conversation.identifier = %lld", conversation.identifier)
    fetchRequest.sortDescriptors = [createdAtDescriptor]

    fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: "normalizedCreatedAt", cacheName: nil)
    fetchedResultsController.delegate = self

    try! fetchedResultsController.performFetch()
    tableView.reloadData()
}

com seu delegado padrão.

EmviewDidLoad meu controlador tem 1 seção com 1 linha. Imprimo-o no console usando a seguinte função:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    print("--->>>")
    print(section)
    print(fetchedResultsController.sections![section].objects!.count)
    return fetchedResultsController.sections![section].objects!.count
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return fetchedResultsController?.sections?.count ?? 0
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let message = fetchedResultsController?.objectAtIndexPath(indexPath) as! Message
    let cellIdentifier = message.sender.identifier == Settings.currentUser?.profile?.identifier ? SentTableViewCellIdentifier : ReceivedTableViewCellIdentifier
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! TableViewCell

    cell.cellTitleLabel?.text = message.content

    return cell
}

e a saída é a seguinte:

--->>>
0
1

Depois que tento adicionar apenas UMA outra mensagem com uma seção diferente, recebo o seguinte:

--->>>
0
2
--->>>
1
1

e então o erro:

CoreData: error: Erro sério de aplicativo. Uma exceção foi capturada pelo delegado de NSFetchedResultsController durante uma chamada para -controllerDidChangeContent :. Atualização inválida: número inválido de linhas na seção 0. O número de linhas contidas em uma seção existente após a atualização (2) deve ser igual ao número de linhas contidas nessa seção antes da atualização (1), mais ou menos o número de linhas inseridas ou excluídas dessa seção (0 inserido, 0 excluído) e mais ou menos o número de linhas movidas para dentro ou para fora dessa seção (0 movido para dentro, 0 movido para fora). com userInfo (nulo)

Por que isso acontece assim?

NSFetchedResultsController por algum motivo, carrega a mesma célula em duas seções:primeiro esegundo. Por quê?

NOTA:

O problema surge apenas quando o FRC insere uma nova seção. Se precisar inserir linha na seção existente, não há problema. O problema é forte relacionado às seções.O problema é SOMENTE quando o FRC tenta inserir uma segunda seção. Quando se trata da terceira ou quarta seção, não há nenhum problema.

questionAnswers(2)

yourAnswerToTheQuestion