2012-01-24 45 views
0

我的应用程序具有三个状态:竞争模态视图控制器之间切换

  • A)与连接到无线网络服务器
  • B),但没有互联网
  • C)没有连接

第一个状态是应用程序的默认操作模式,另外两个(B & C)作为模态视图控制器呈现。在各种可达性改变中,应该出现正确的模态视图。

不幸的是,在某些情况下,B & C都试图同时呈现,或者B当前呈现并且可能距离关闭一毫秒,但C已经试图展示自己。

我的解决方案是基本上为每个模态视图创建一个信号量 - 当模态视图打开时,它通过委托发送消息到主视图打开标志。然后,当第二个模式视图尝试打开时,它会看到第一个模式视图处于打开状态,并等待它关闭。这对我试图构建一个非常基本的状态机似乎是一个荒谬的黑客攻击。

有什么想法?

回答

1

我会将单独的B & C个案合并为一个视图控制器,该视图控制器根据在任何给定时刻是否发生B或C来更改其视图。这样你就没有竞争,因为只有一个视图控制器。

+0

这似乎是最简单的解决方案 - 没有通知,没有委派,所以代码将尽可能维护。 – nflacco

1

您不指定在哪种情况下B可以将两者都展示出来,因此首先想到的是您可以寻找一种不同的方式来检查您是否处于情况B或C,以便您可以更好地消除歧义。

说到你正在使用的国旗,我想这个丑陋的部分与你提及的等待有关。这对我来说似乎有点矫枉过正。一种替代方法是让第二个模态视图等待标志被重置,而不是让第一个模态视图发送第二个视图正在观察的通知。这个实现很简单,你可以在S.O.中找到很多例子。 (例如,this one)。

+0

不幸的是,B&C案例似乎基于我的可达性机制的输出(或者更恰当地说,构成B&C重叠的一些条件)重叠。重新通知,我的应用程序已经为其他目的做了大量的工作,我希望尽可能保持网络状态和关联的用户界面。 – nflacco