Не удается преобразовать значение типа «NSIndexPath» в ожидаемый тип аргумента «NSIndexPath».

Не удается преобразовать значение типа «NSIndexPath» в ожидаемый тип аргумента «NSIndexPath».

Ошибка self.collectionView?.moveItemAtIndexPath(obj[0] as! NSIndexPath, toIndexPath: obj[1] as! NSIndexPath) line

if let changes = self.objectChanges{
    self.collectionView?.performBatchUpdates({ () -> Void in
        for change in changes as NSArray as! [NSDictionary] {
            change.enumerateKeysAndObjectsUsingBlock { (keyObject:AnyObject!, obj:AnyObject!, stop) -> Void in
                let key = keyObject as! NSNumber
                let type = NSFetchedResultsChangeType(rawValue: key.unsignedLongValue)!
                switch (type)
                {
                    case .Insert:
                        self.collectionView?.insertItemsAtIndexPaths(obj as! ([NSIndexPath]))
                    case .Delete:
                        self.collectionView?.deleteItemsAtIndexPaths(obj as! ([NSIndexPath]))
                    case .Update:
                        self.collectionView?.reloadItemsAtIndexPaths(obj as! ([NSIndexPath]))
                    case .Move:
                        self.collectionView?.moveItemAtIndexPath(obj[0] as! NSIndexPath, toIndexPath: obj[1] as! NSIndexPath)
                    default:
                        break
                }
            }
        }
    }, completion: nil)
}

person mosaic6    schedule 28.09.2015    source источник
comment
Вам действительно нужно перестать использовать неправильные теги во всех ваших вопросах.   -  person rmaddy    schedule 28.09.2015
comment
не могли бы вы напечатать (obj) в случае .Move и опубликовать вывод   -  person Scriptable    schedule 28.09.2015
comment
Сообщения об ошибках, подобные сообщениям Swift, обычно являются отвлекающим маневром и вызваны какой-либо другой синтаксической ошибкой. Меня смущает for change in changes as NSArray as! [NSDictionary] - что произойдет, если вы возьмете его в скобки, чтобы убедиться, что приведения происходят так, как вы ожидаете?   -  person Grimxn    schedule 28.09.2015


Ответы (1)


Вы пытаетесь применить индекс к obj, который равен AnyObject, а не Array. Вы должны преобразовать obj в [NSIndexPath]:

if let obj = obj as? [NSIndexPath] {
    switch (type) {
        case .Insert:
            self.collectionView?.insertItemsAtIndexPaths(obj)
        case .Delete:
            self.collectionView?.deleteItemsAtIndexPaths(obj)
        case .Update:
            self.collectionView?.reloadItemsAtIndexPaths(obj)
        case .Move:
            self.collectionView?.moveItemAtIndexPath(obj[0], toIndexPath: obj[1])
        default:
            break
    }
}
person mixel    schedule 28.09.2015