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是否每次追加同一个人,每次只给予您第一个项目。 仔细检查一下,因为没有其他的原因