Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何在UICollectionViewLayout和UIViewController之间传递数据_Objective C_Xcode_Swift_Uicollectionview_Uicollectionviewlayout - Fatal编程技术网

Objective c 如何在UICollectionViewLayout和UIViewController之间传递数据

Objective c 如何在UICollectionViewLayout和UIViewController之间传递数据,objective-c,xcode,swift,uicollectionview,uicollectionviewlayout,Objective C,Xcode,Swift,Uicollectionview,Uicollectionviewlayout,我需要基于对api的http调用创建自定义布局。基于循环中api的结果,我将从CollectionView填充一个数组 在CustomLayout中,我需要使用此数组,以便正确绘制每行的详细信息。 在collectionView中,我在将数据添加到数组后使用重新加载数据 多谢各位 代码: 我不完全确定我是否理解您的情况,但我将提供两种在您的应用程序中进行通信的方法 使用NSNotificationCenter 在需要触发事件的控制器的viewDidLoad中添加观察者: NSNotificati

我需要基于对api的http调用创建自定义布局。基于循环中api的结果,我将从CollectionView填充一个数组

在CustomLayout中,我需要使用此数组,以便正确绘制每行的详细信息。 在collectionView中,我在将数据添加到数组后使用重新加载数据

多谢各位

代码:


我不完全确定我是否理解您的情况,但我将提供两种在您的应用程序中进行通信的方法

使用NSNotificationCenter 在需要触发事件的控制器的viewDidLoad中添加观察者:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "remoteRefresh:", name:"remoteRefreshID", object: nil)
在同一个控制器中添加一个与选择器名称相同的观察者,如上面的示例“remoteRefresh”

然后,在其他控制器中,您可以发布消息,并且您的remoteRefresh操作将运行:

NSNotificationCenter.defaultCenter().postNotificationName("remoteRefreshID", object: nil)
有关更多详细信息,我有一个关于NSNotificationCenter的网站

协议/委托模式 第二个是协议/委托模式,这有点复杂,但我这里有一个书面教程:

另一种选择 如果您仍然有问题,这里有一个选项。你可以声明一个全局结构来保存你的数据,把它粘贴到一个游乐场去理解

struct SessionData {

    static var events = [String]()
}


class classOne {

    func addValues() {

        SessionData.events.append("a message")
        SessionData.events.append("another message")
    }
}


class classTwo {

    func getValues() -> [String] {

        return SessionData.events

    }

}

classOne().addValues()
classTwo().getValues()

请查看上的堆栈溢出文章。欢迎来到堆栈溢出。我不确定我是否理解您的问题。。。因为我看不到你的模型层在哪里,它甚至可以作为你的视图控制器服务于你的自定义布局。在你的问题中,你能清楚地解释一下吗,1.)现在代码中发生了什么2.)你期望代码中会发生什么。请非常明确,有人会给你一个答案。我无法根据您提供的内容了解您正在做什么。您好。这不是完整的代码!这只是逻辑。1)在集合视图中,我有一个数组Events()。当用户打开视图时,在后台创建对api的http调用。数据被接收,事件被附加到数组中。2根据事件,我需要创建一个网格。3.从一开始我就不知道在集合视图中将创建多少行。由于这个调用,我重新加载集合视图数据。调用prepareLayouts()。在这个方法中,我需要从集合视图访问Events()数组来创建单元格。问题是:如何在布局中使用CollectionView中的Events()?或者这是不可能的?喂。看来你不明白我的问题。我不需要在两个控制器之间传递数据。这是一个具有Collecton视图的控制器。我需要在集合视图和布局之间传递数据。请注意上面的代码。您好。我在上面发布了关于问题的详细信息您好。谢谢你的回答。我想到了全球宣言,想避免它。但在这种特殊情况下,我似乎需要使用它。也许可以使用NSUserDefaults来存储数据?
NSNotificationCenter.defaultCenter().postNotificationName("remoteRefreshID", object: nil)
struct SessionData {

    static var events = [String]()
}


class classOne {

    func addValues() {

        SessionData.events.append("a message")
        SessionData.events.append("another message")
    }
}


class classTwo {

    func getValues() -> [String] {

        return SessionData.events

    }

}

classOne().addValues()
classTwo().getValues()