         if arrayItems.count > indexPath.section, var array = arrayItems[indexPath.section] {
 
             array.insert(item, at: indexPath.row)
+            arrayItems[indexPath.section] = array
+
         } else {
 
             var array = [T]()

    
    public func itemAtIndexPath(indexPath: IndexPath) -> T {

        if let array = arrayItems[indexPath.section] {
            return array[indexPath.row]
        }
        preconditionFailure("There was no item at indexPath \(indexPath)")
    }
    
    public func deleteItemAtIndexPath(indexPath: IndexPath) {

        var items = [T]()
        if var array = arrayItems[indexPath.section] {

            let item = array[indexPath.row]
            items.append(item)
            array.remove(at: indexPath.row)
        }

        delegate?.providerDidDeleteItemsAtIndexPaths(items: items, atIndexPaths: [indexPath])
    }

    public func insertItem(item: T, atIndexPath indexPath: IndexPath) {

    
    public func updateItem(item: T, atIndexPath indexPath: IndexPath) {

        if arrayItems.count > indexPath.section, var array = arrayItems[indexPath.section] {

            array[indexPath.row] = item
            arrayItems[indexPath.section] = array

            delegate?.providerDidUpdateItemsAtIndexPaths(items: [item], atIndexPaths: [indexPath])
        }
    }
    
    public func deleteAllInSection(section: Int) {

        if arrayItems.count > section, var array = arrayItems[section] {

            array.removeAll()
            arrayItems[section] = array

            delegate?.providerDidDeleteAllItemsInSection(section: 0)
        }
    }
    
    public func batchUpdates(updatesBlock: VoidCompletion) {
