Singleton类不用UICollectionViewCell的Swift更新数据

我不知道这是否是正确的方式来说这个,但我一直在试图获取数据到ColectionViewCell,但它似乎并没有显示所有这些。 这个问题跟随从卡没有显示不同的数据。 Koloda / Yalantis 。 看起来,框架需要一个不同的方法将数据应用到索引,但我不知道如何实现这一点。

这是我的class级的样子:

import SwiftyJSON class Person { var firstName: String? init(json: JSON) { self.firstName = json["first_name"].stringValue } } 

这里是我pipe理Person类的单例:

 class PersonManager { static let shared = PersonManager() private init() {} var persons = [Person]() func removeAll() { persons.removeAll() } func addPerson(_ person: Person) { persons.append(person) } } 

以下是我在获取初始化追加数据如何调用数据:

 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) let person = PersonManager.shared.persons[kolodaView.currentCardIndex] //Returns the first persons first name as it is supposed to cell.textLabel?.text = person.firstName } 

数据存在,因为它计数我的数据库中的人数。 但它不断返回所有卡的第一人。

更新:

使用Firebase我正在读取用户数据,然后像这样追加它:

 func fetchUser() { let databaseRef = Database.database().reference(withPath: "users") databaseRef.observe( .value, with: { (snapshot) in for child in snapshot.children { guard let snapshot = child as? DataSnapshot else { continue } let person = Person(from: snapshot) self.person = person PersonManager.shared.addPerson(person) } self.kolodaView.reloadData() }) } 

尝试改变你的function如下:

 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) let person = PersonManager.shared.persons[indexPath.row] //Returns the first persons first name as it is supposed to cell.textLabel?.text = person.firstName } 

问题是你的variableskolodaView.currentCardIndex总是为0 ,它将永远不会显示其他结果,而是集合中的第一个。

indexPath.row是用来控制你需要的这个索引。

可能是你应该尝试indexPath.item,而不是行(这是为UITableView)

并确保

let cell = collectionView.dequeueReusableCell(withReuseIdentifier:“cell”,for:indexPath)

细胞不是零。 你应该打印每个细胞。如果它是零,你不能把你的数据在一个无UICollectionViewCell。 所以添加代码

if(cell == nil)cell = [UICollectionViewCell new];

我想在:

 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return PersonManager.shared.persons.count } 

在cellForItem你应该使用indexPath.row而不是kolodaView.currentCardIndex除非这真的是你所需要的(很奇怪)。 如果是这样,请检查PersonManager是否每次追加同一个人,每次只给予您第一个项目。 仔细检查一下,因为没有其他的原因