我正在努力完成某些事情而且我不确定最好的方法是什么。我正在通过蓝牙传输和接收数据,并且数据必须同时与多个视图共享,尽管一个视图在任何时候都是活动的。虽然其他视图不可见,但我需要它们接收通过蓝牙发送的数据,以保持正常状态。
我认为UIPageViewController是正确的方法,但是我不清楚所有的视图控制器在使用这个模型时是否还活着。或者,我可以在我的UIPageViewController中维护ChildViewControllers的状态,并使其像数据源一样运行。
如果我没有使用正确的词汇表,我很抱歉,我仍然试图让我听到很多这些内容。
答案 0 :(得分:1)
由于某些视图控制器或视图在接收数据时可能不存在,因此您需要一个状态对象来保存数据。该对象将在应用程序的生命周期中存在,并且可由任何视图控制器访问。需要显示数据的视图控制器将从该对象获取它。
答案 1 :(得分:1)
听起来像你的意思是多个活动视图控制器,而不是视图。
这两件事情不可以互换。视图控制器管理视图层次结构,并在这些视图和它管理的模型数据之间进行调解。
从iOS 6开始,使用故事板让视图控制器管理部分屏幕非常容易。您将容器视图添加到父视图控制器,然后在容器视图和视图控制器之间连接并嵌入segue,其中将在那里绘制内容。系统然后设置所有内容,以便子视图控制器的视图安装在父级中。
页面视图控制器用于书籍样式界面,其中用户在每个管理一页内容的视图控制器之间翻转。页面视图控制器更像是表视图。它有一个委托和一个数据源。它要求数据源根据需要为页面提供视图控制器。
我认为页面视图控制器旨在为每个需要显示的页面请求新的视图控制器,并在完成它们时丢弃它们。因此,管理一组“坚持”的视图控制器不是一个好的选择。
如果您需要显示的页数很小且已修复,您可以为所有页面创建视图控制器并将其保存到阵列中,然后根据需要将它们返回到页面视图控制器。这将使所有个人视图控制器保持活动状态。
您可能想要设置一个蓝牙管理器单例对象来管理与其他设备的蓝牙对话,并在数据进入时广播通知。这样,视图控制器可以根据需要注册他们感兴趣的通知,并且在不再需要通知时注册。 (确保取消注册dealloc方法中的通知,否则当蓝牙管理器尝试向解除分配的对象发送通知时,您将崩溃。)
答案 2 :(得分:0)
理想的方法是创建自定义对象或类,并将数据存储在那里。这样,它可以被所有ViewControllers访问,并且您不会在它们之间传递数据并创建内存噩梦。如果您只是一次添加数据,然后在整个应用中使用该数据,我可以建议singleton吗?
答案 3 :(得分:0)
你之前听说过MVC或Observer的设计模式吗?
表示封装在模型中的数据状态,一旦显示UIViewController,请询问模型中的当前状态并将其显示在那里。
现在问题是如何实现这个? 在上图中,门对象是从蓝牙接收的数据,听众或观察者是你的视图(即UIviewcontroller)
UIPageController能完成这项工作吗?
是的但不是您想要的方式。 UIpagecontroller使用视图控制器的延迟加载,即它只在显示或即将显示时加载视图控制器。
这就是UIPageController的样子。它是一个带有子视图控制器的scrollview。仅加载可见部分。因此,由用户加载的视图控制器将是唯一将接收通知的人。您不希望强行加载所有这些因为它的性能效率不高。
建议的解决方案:使用NSNotifications并使每个UIView控制器注册到它,并且一旦从蓝牙获取数据将其发送到视图控制器。