Справочная информация:
Я новый разработчик, и я не уверен, куда обратиться за помощью. Я устранял эту проблему на прошлой неделе, но я не знаю, что является причиной проблемы. Это мой первый пост, и я хочу быть хорошим участником, поэтому, пожалуйста, дайте мне знать, если я допустил какие-либо ошибки, и я с удовольствием их исправлю.
Спасибо!
Проблема:
Я настраиваю 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
}