gpt4 book ai didi

ios - 更新模型中数据更新的 View Controller

转载 作者:行者123 更新时间:2023-11-29 02:10:44 24 4
gpt4 key购买 nike

如何在不使用通知、委托(delegate)或 KVO 的情况下通知 View Controller 模型中的新更新?在一次采访中有人问我是否可以使用 block 来通知我的 View Controller 有更新?您能给我一个如何使用 block 来执行此操作的示例吗?

最佳答案

关于您所询问的主题有很多讨论(在委托(delegate)、通知、观察和阻止之间进行选择)。我将看看是否可以总结为什么以及如何快速使用 block :

当只有一个或两个事件需要告诉观察者/调用对象时,您可以使用 block 。 iOS 库中的一个示例位于 NSURLSessionDataTask 类中 - 它有一个方法:

- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler

由于网络调用中可能发生的事情数量有限(成功或失败),因此使用 block 。

另一方面,当有很多不同的事件要通知观察者/委托(delegate)时,您可能会使用委托(delegate)。一个很好的例子是 UITextField - iOS 中的文本字段可以开始编辑、结束编辑、更改字段中的字符、清除、返回等。用所有内容重载一个 block 并没有多大意义。不同的选择。因此,使用委托(delegate)是为了让委托(delegate)人可以选择它关心了解/更新哪些事件,并跳过其他事件。

要在您的模型上使用它,您可能有一个如下所示的模型方法,例如:

- (void) saveObject:(NSObject*)object completionHandler:(void (^) (BOOL success, NSError *error))completionHandler

这将更新您传入的对象,然后在完成时运行您传入的 block 。在该 block 中,您可以访问成功标志以及可能的错误。您可以直接从您的 View Controller 调用它并使用在所述 View Controller 中定义的变量。

整个辩论实际上更像是一种艺术形式,而不是一门精确的科学。如果您想了解更多相关信息,请随时查看以下一些帖子:

http://stablekernel.com/blog/blocks-or-delegates/ http://blog.shinetech.com/2011/06/14/delegation-notification-and-observation/

关于ios - 更新模型中数据更新的 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29308698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com