将数组从视图控制器传递到视图控制器 Returns 空数组
Pass Array from View Controller To View Controller Returns Empty Array
这类问题有人问也有人回答,但我的具体情况returns一个空数组。我首先在 View Controller 1 (VC1) 中创建一个数组。 VC1 包含一个集合视图。我尝试将 UIView 添加到 cellForItem 函数中的数组。
/// 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
}
我在调试中确认,当集合视图运行时,它确实将 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)")
这 returns 下面的调试显示空数组。
messagesViewController.messageViewArray = (
)
为什么数组对象在 VC2 中不持久化?我可以对 VC2 中的 messageViewArray 进行哪些更改。在此先感谢您的时间。
您正在 VC2
中创建 MessagesViewController
的新实例,它将具有 cellViewArray
的初始值,即 NSMutableArray()
在打印出来时得到的值空的。您需要将 MessagesViewController
的实例作为 weak var
传递给 VC2
的实例,或者将 cellViewArray
传递给 VC2
,这将是更好的方法。然后您可以打印出 cellViewArray
而无需像您在此处所做的那样创建 MessagesViewController
的新实例。
是对的。
代码如下
let messagesViewController = MessagesViewController()
使用 messageViewArray
.
的空实例创建 MessagesViewController class 的新实例
这行得通。您可以直接访问它。我不确定确切的推理,所以欢迎其他人解释。
在 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
In VC 1 - 来自 VC 2
的引用变量
let arrayNameInVCOne = MessagesViewController.arrayNameInVCTwo
这类问题有人问也有人回答,但我的具体情况returns一个空数组。我首先在 View Controller 1 (VC1) 中创建一个数组。 VC1 包含一个集合视图。我尝试将 UIView 添加到 cellForItem 函数中的数组。
/// 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
}
我在调试中确认,当集合视图运行时,它确实将 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)")
这 returns 下面的调试显示空数组。
messagesViewController.messageViewArray = (
)
为什么数组对象在 VC2 中不持久化?我可以对 VC2 中的 messageViewArray 进行哪些更改。在此先感谢您的时间。
您正在 VC2
中创建 MessagesViewController
的新实例,它将具有 cellViewArray
的初始值,即 NSMutableArray()
在打印出来时得到的值空的。您需要将 MessagesViewController
的实例作为 weak var
传递给 VC2
的实例,或者将 cellViewArray
传递给 VC2
,这将是更好的方法。然后您可以打印出 cellViewArray
而无需像您在此处所做的那样创建 MessagesViewController
的新实例。
代码如下
let messagesViewController = MessagesViewController()
使用 messageViewArray
.
这行得通。您可以直接访问它。我不确定确切的推理,所以欢迎其他人解释。
在 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
In VC 1 - 来自 VC 2
的引用变量let arrayNameInVCOne = MessagesViewController.arrayNameInVCTwo