Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.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
在iOS中访问对象图的其他部分中的对象_Ios_Objective C - Fatal编程技术网

在iOS中访问对象图的其他部分中的对象

在iOS中访问对象图的其他部分中的对象,ios,objective-c,Ios,Objective C,我正在使用iOS解决这个问题 我的班级结构如下: ScheduleVC(带有UICollectionView)谁拥有 ScheduleCell(UICollectionViewCell)谁拥有 ScheduleDayTVC(UITableViewController)谁拥有 ScheduleDayCell(UITableViewCell)谁拥有 OrderDetailView(这是一个视图,也是ContentView的子视图) 5(OrderDetailView)中有一个操作需要调用1(S

我正在使用iOS解决这个问题

我的班级结构如下:

  • ScheduleVC(带有UICollectionView)谁拥有
  • ScheduleCell(UICollectionViewCell)谁拥有
  • ScheduleDayTVC(UITableViewController)谁拥有
  • ScheduleDayCell(UITableViewCell)谁拥有
  • OrderDetailView(这是一个视图,也是ContentView的子视图)
  • 5(OrderDetailView)中有一个操作需要调用1(ScheduleVC)。只有一个ScheduleVC,所以我快速而肮脏的解决方案是创建一个singleton类,让我快速访问

    这是解决这个问题的最好办法吗?我不认为把1分传给5分是很干净的

    我还研究了KVO,似乎您需要一个对观察者和“被观察”对象的引用,而我在任何地方都没有

    编辑:
    顶级VC拥有一个UICollectionView,其布局类似于存折或提醒。每个单元格上都有一个带有自己控制器的TableView。此tableview中的每个UITableViewCell都有一个添加到其contentView的视图(5)。此视图有一个按钮,按下时需要联系1。

    您需要呼叫什么?它是执行某些业务逻辑还是更新UI的方法

  • 在第一种情况下(业务逻辑),最好创建一个单独的类(而不是视图控制器),并使其成为一个可以从任何地方调用的单例,而无需保留对它的引用。这个单例类可以有人工观察者,也可以使用NSNotificationCenter(见下文)

  • 在第二种情况下,您应该考虑使用NSNotificationCenter。触发NSNotification会让观察者知道(ScheduleVC应该是观察者)发生了他们感兴趣的事情,并相应地更新UI。如果您有一个singleton类,也可以使用此模式,它可以在UI的某些部分需要更新时触发NSNotification


  • 在任何情况下,您都会得到一个不依赖于UI/VC结构的良好解耦的体系结构。

    首先,我想知道这些对象是什么样的子类(
    UIViewController
    UIView
    NSObject
    )。
    就我个人而言,我喜欢使用模型-视图-控制器设计格式,这将帮助您解决一些问题。(同时,Paul Hegarty教授在iTunes U上开设了涵盖此主题的课程)。
    在您的设计模式中,有两件事与MVC模式相冲突,一旦修复,将真正帮助您解决问题

    ScheduleVC who owns        
        ScheduleCell who owns  // controller owns view, this checks out
    
            ScheduleDayTVC who owns    // view owns another view controller, does not check out
                ScheduleDayCell who owns // controller owns view, would check out if the controller was not controlled by view higher up the chain.
                    OrderDetailView      // view owns view, this checks out
    

    我能给出的最大建议是,您应该切换到MVC模式,并坚持下去。它有助于以逻辑的方式组织一切。

    为什么与ScheduleVC对话需要另一个控制器(我假设ScheduleDayTVC是“表视图控制器”)拥有一个视图?我认为您需要重新配置设计的这一部分。让两名控制员互相要求做事;让视图只管理它的屏幕空间。我添加了一个编辑,也许可以增加一点清晰度。我还在我的“类结构”中添加了子类。我添加了子类,实际上是为了更新UI。我将查看NSNotification。然后查看本教程: