0

感谢Lock a NSMutableArray of an object but not the rest of my object when using GCD我有一个用户对象,它在 init 时通过 gcd 填充位置数组,希望当我们以模态方式到达 LocationViewController 时,位置存在user.locations(用户通过视图控制器传递),如果他们不在那里,那么我只需在选择器中显示“正在加载...”。

理想情况下,我希望在dispatch_sync方法中从用户的 gcd 中强制刷新。我可以向 LocationViewController 添加一个方法来刷新选择器等,但我不确定如何安全地访问它。

我的第一个想法是在 LocationViewController 中,如果位置不存在(即 nil),那么在用户中设置对此 LocationViewController 的引用。如果 locCont 不是 nil ,那么我可以在其中dispatch_sync调用该方法。[locCont mymethod]但我不确定如何在用户类中设置属性?

@property (strong, nonatomic) LocationsViewController * locCont;

让我担心的是用户可以随时注销并返回根视图。然后我会设置

user.locCont = nil

ARC会很好地分类任何宿醉记忆吗?

我的另一个担忧是,如果他们不选择设置位置并在以后查看会发生什么。我想我可以通过user.locContprepareforsegue.

如果用户到达那里,是否有更好的方法让 LocationsViewController 刷新?

4

2 回答 2

2

我建议使用通知来避免“用户”对象和视图控制器之间的强连接。

LocationViewController 将在其init方法中注册自定义通知并在dealloc.

GCD 代码在完成后“发布”通知。这会导致通知所有侦听器,以便 LocationViewController 可以刷新其视图。

请参阅NSNotificationCenter文档,并 在 Objective-C 中通过 NSNotificationCenter 发送和接收消息?好的示例代码应该有助于开始。

于 2013-07-31T19:44:57.857 回答
0

如果您通过某个user对象异步检索数据,并且您希望视图控制器能够访问该对象,您通常会维护对该user对象的一些外部引用。一种常见的方法是使该user对象成为单例。另一个是让它成为应用程序委托的属性。无论哪种方式,该user对象都可能不会维护对任何视图控制器的引用。该user对象只是在异步检索信息的业务中,视图控制器可以user通过单例或应用程序委托访问对象的当前状态。

如果您希望user对象能够在数据检索完成时通知视图控制器,您可能会让它通过通知中心发布通知。视图控制器可以注册自己以观察这些通知(并且,在视图控制器关闭自己之前,将自己作为该通知的观察者移除)。

于 2013-07-31T19:45:57.793 回答