Как добавить / удалить элементы из NSCollectionView с несколькими разделами - PullRequest
1 голос
/ 10 мая 2019

Справочная информация:
Я новый разработчик, и я не уверен, куда обратиться за помощью. Я устранял эту проблему на прошлой неделе, но я не знаю, что является причиной проблемы. Это мой первый пост, и я хочу быть хорошим участником, поэтому, пожалуйста, дайте мне знать, если я допустил какие-либо ошибки, и я с удовольствием их исправлю.

Спасибо!

Проблема:
Я настраиваю NSCollectionView, который имеет 5 разделов. Есть 5 кнопок, которые добавляют новые элементы в пять разделов, и есть одна кнопка, которая удаляет выбранные элементы. В настоящее время настроена одна кнопка.

Но элементы, похоже, не добавляются и не удаляются должным образом в представлении коллекции.

И приложение вылетает, если при запуске не было добавлено ни одного элемента в представление коллекции.

Кроме того, при добавлении новых элементов в представление коллекции добавляется дополнительный элемент.

Работа:
Я работал с несколькими NSCollectionView учебными пособиями, такими как raywenderlich.com, ductran.com, видео на YouTube, статьи среднего уровня, публикации на stackoverflow.com и документация Apple.

Вот несколько ссылок, которые были более полезными:
raywenderlich - часть 1
raywenderlich - часть 2
ductran - фото приложение
ductran - новостное приложение
яблоко - документация

Я отлаживал построчно от начала до конца, пару раз начинал с нуля, строил простейшее представление коллекции и шаг за шагом добавлял к нему, ссылаясь на UICollectionView.

Я очень хочу учиться, но ресурсы, доступные на NSCollectionView, кажутся тонкими.

Код:
Я не уверен, где проблема, поэтому я не знаю, какой код отправлять.

Я загрузил приложение на github: Ссылка

Я думаю, что проблема может возникнуть в deleteItemsAtIndexPaths. Неправильный элемент удаляется, и приложение вылетает, если все элементы удалены:

func deleteItemsAtIndexPaths(_ indexPaths: [IndexPath]) {
        var indexes = [Int]()
        for indexPath in indexPaths {
            indexes.append(absoluteIndexForIndexPath(indexPath))
        }
        var newWebsites = [Website]()
        for (index, website) in websites.enumerated() {
            if !indexes.contains(index) {
                newWebsites.append(website)
            }
        }
        websites = newWebsites
    }

fileprivate func absoluteIndexForIndexPath(_ indexPath: IndexPath) -> Int {
    var index = 0
    for i in 0 ... (indexPath as NSIndexPath).section {
        index += numberOfWebsitesInSection(i)
    }
    index += (indexPath as NSIndexPath).item
    return index
}

1 Ответ

1 голос
/ 10 мая 2019

Добавление / удаление:
Дополнительный / неправильный элемент был связан с absoluteIndexForIndexPath. Было установлено ... вместо .. <<br>
Сбой:
Авария была связана с viewForSupplementaryElementOfKind. Для функции NSCollectionView требовалось установить if/then для websitesInSection > 0

Работает NSCollectionView с 5 разделами и 5 кнопками: Ссылка

...