这类问题有人问过,也有人回答过,但我的具体情况是返回一个空数组。我首先在视图控制器1(VC1)中创建一个数组。VC1包括一个集合视图。我尝试在cellForItem func中为数组添加一个UIView。
/// A subclass of `UIViewController` with a `MessagesCollectionView` object
/// that is used to display conversation interfaces.
open class MessagesViewController: UIViewController,
UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
public var cellViewArray = NSMutableArray()
open func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = messagesCollectionView.dequeueReusableCell(TextMessageCell.self, for: indexPath)
cell.configure(with: message, at: indexPath, and: messagesCollectionView)
let cellView = cell.contentView
//print("cellView = \(cellView)")
messageViewArray.insert(cellView, at: indexPath.row)
//print("messageViewArray = \(String(describing: messageViewArray))")
return cell
}
我在debug中确认,当集合视图运行时,确实将cellView保存到messageViewArray中,而且都不是nil。
messageViewArray = (
"<UIView: 0x142913720; frame = (0 0; 359 140); autoresize = W+H; gestureRecognizers = <NSArray: 0x142913d30>; layer = <CALayer: 0x1429138a0>>",
"<UIView: 0x14291bbc0; frame = (0 0; 359 256); autoresize = W+H; gestureRecognizers = <NSArray: 0x14291c1d0>; layer = <CALayer: 0x14291bd40>>",
"<UIView: 0x142929520; frame = (0 0; 359 256); autoresize = W+H; gestureRecognizers = <NSArray: 0x142929b30>; layer = <CALayer: 0x1429296a0>>",
"<UIView: 0x14298e610; frame = (0 0; 359 140); autoresize = W+H; gestureRecognizers = <NSArray: 0x14298ec20>; layer = <CALayer: 0x14298e790>>",
"<UIView: 0x142929520; frame = (0 0; 359 256); autoresize = W+H; gestureRecognizers =
)
在View Controller 2 (VC2)中,我尝试从VC1访问messageViewArray,并对UIView对象做一些事情。
let messagesViewController = MessagesViewController()
print("messagesViewController.messageViewArray = \(messagesViewController.integerViewArray.description)")
这在debug中返回了下面的结果,显示为空数组。
messagesViewController.messageViewArray = (
)
为什么数组对象在VC2中不能持久化?我可以做什么改变来引用VC2中的messageViewArray。先谢谢你的时间。
@Frankenstein 的回答 是正确的。
以下代码
let messagesViewController = MessagesViewController()
创建一个新的MessagesViewController类的实例,其中包含一个空的 messageViewArray
.
你正在创建一个新的实例 MessagesViewController
在 VC2
的初始值。cellViewArray
也就是 NSMutableArray()
的实例,而把它打印出来时得到的是空的。要么你需要通过 MessagesViewController
的实例。VC2
作为 weak var
或通过 cellViewArray
到 VC2
这将是一个更好的方法。然后你可以打印出 cellViewArray
而不需要创建新的 MessagesViewController
就像你在这里做的那样。
这样就可以了。你可以直接访问它。我不清楚具体的道理,欢迎别人来解释。
在VC 2中--声明变量。
/// A subclass of `UIViewController` with a `MessagesCollectionView` object
/// that is used to display conversation interfaces.
open class MessagesViewController: UIViewController,
UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
public static var arrayNameInVCTwo : NSMutableArray? = nil
在VC 1中--引用VC 2中的变量
let arrayNameInVCOne = MessagesViewController.arrayNameInVCTwo