2010-05-19 61 views
2

我正在设计一个相当大的应用程序,在启动时它将创建与几个不同的服务器的会话。当他们创建一个在应用程序的所有部分中使用的会话时,我认为它在App Delegate中是最好的。AppDelegate应该做多少?

但问题是我需要在屏幕上表示会话进度。我计划在主菜单的底部有一个UIToolBar,我不想用进度条来覆盖它,但是覆盖了它上面的UIView。所以我看到它的方式可以通过几种不同的方法来实现。

1)让App Delegate建立会话并将进度报告给主菜单类,以便它可以在进度条中表示它(如果会话是在单独的线程中创建的,那么我会遇到任何问题吗?) ,

2)有应用程序委托显示主菜单(UIView与一堆按钮和UIToolBar),并跟踪并显示进度(我从来没有在应用程序委托中显示任何东西,但假设你可以做到这一点,但它不推荐)或

3)有App Delegate只需推动主菜单,并让mainMenu类创建会话并显示进度条。

4)我认为另一种方法是在委托类中创建会话,并将委托设置为mainMenu而不是self(AppDelegate),尽管我从未使用过除self之外的其他任何东西,所以不确定如果这可以工作,或者如果我能够关闭线程(通过调用super也许?)作为它在AppDelegate中的运行而不是该类的委托。

正如我之前所说的在一个单独的线程中创建一个类中的会话,所以它不会锁定用户界面,我认为最好的方法是第一个但我会遇到问题让它运行在单独的线程,回报应用程序委托,然后将该消息发送到mainMenu视图?

我希望大家都有道理,让我知道你是否需要进一步澄清。任何信息表示赞赏

干杯,

回答

1

想必连接的状态,将在您的应用程序的功能产生影响。我可能会想到一个连接管理器对象,它可以启动连接,维护其状态并在查询其状态时作出响应。与单一对象返回现有对象或创建并返回一个不存在的新对象一样,连接管理器甚至不需要“连接”方法,只需“获取句柄” - 如果连接不是打开它可以尝试使它如此。

你也提到状态必须报告在主屏幕上。拥有一个管理员对象,能够在后台执行不确定时间的任务(打开与可能已准备就绪,忙碌,远离或简单中断的主机的连接),然后向主线程报告进度,以便用户界面可以更新(记住,在辅助线程中没有UIKit访问)看起来很理想,并且它也保持你的视图不同。

+0

道歉,如果我想念你写的东西,但你说像一个单身人士作为连接管理器启动会话? – Rudiger 2010-05-19 01:08:32

+0

我只是说它会像单身人士一样在返回一个指向它自身之前检查它是否存在。在这种情况下,它会检查连接的状态,并可能在将连接的句柄返回给程序的其他部分使用之前启动连接。通过抽象连接状态和过程,你可以使自己更容易,并提供方便的功能,如“关闭所有连接”。 – 2010-05-19 01:24:01

+0

嗯,有趣。我想你是对的。我会去设计它,看看是否遇到任何问题。可能看看别人是否考虑到了这个问题 – Rudiger 2010-05-19 01:38:36