我首先执行了一个主视图控制器,看起来如下所示,
MainViewController
class MainViewController: UIViewController {
var collectionView: UICollectionView!
var dataSource: DataSource!
SomeAction().call() {
self.dataSource.insert(message: result!, index: 0)
}
}
集合视图的数据源
class DataSource: NSObject, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
var conversation: [messageWrapper] = []
override init() {
super.init()
}
public func insert(message: messageWrapper, index: Int) {
self.conversation.insert(message, at: index)
}
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return conversation.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let textViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "textViewCell", for: indexPath) as! TextCollectionViewCell
let description = conversation[indexPath.row].description
textViewCell.textView.text = description
return textViewCell
}
}
因此,当执行MainViewController
时,会在collectionview的数据源中添加一个完全正常的数据源。
问题 现在,我有另一个看起来像的类 的 SomeController
open class SomeController {
let dataSource: DataSource = DataSource()
public func createEvent() {
self.dataSource.insert(message: result!, index: 1)
}
}
当我从上面的控制器添加一些数据时,conversation
为空,没有现有的一条记录并抛出Error: Array index out of range
。我能理解这是因为我再次实例化了DataSource
。
答案 0 :(得分:0)
Datasource类已使用默认的nil值重新初始化,您必须将更新的类传递给下一个控制器才能访问其更新状态。
如何在其他类中添加/删除数据?
这是最好的做法吗?
我可以将对话作为全局变量吗? 不,最好使用型号/ mvc风格。您的模型上的数据,ui在您的viewcontrollers上。
答案 1 :(得分:0)
您的初始计数似乎是1,但您在索引1处插入(超出索引)
使用self.dataSource.insert(message: result!, index: 0)
insteaded
或使用append
。