ios - 当数据改变时如何调用函数?

标签 ios swift uitableview observers

我在 main.swift 中有表格 View 如果

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

被调用(在appdelegate中)我的数据库获取新数据。

但是我的 View 没有改变,因为我没有调用tableview.reloadData

所以我的问题是如何在

之后调用tableview.reloadData
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

打电话了。 (我尝试了 Main().myreload (//自定义函数),但它显示 fatal error ..)

最佳答案

当数据库重新加载时,您会收到 application(_:open:options:) 调用,这似乎很奇怪。当外部应用程序告诉您的应用程序打开 URL 时,将调用该函数。

如果确实如此,您需要一种方法来从您的应用程序委托(delegate)向任何关心的人发送消息。我建议定义并使用 NotificationCenter 消息。让包含 TableView 的 View Controller 调用 addObserver(forName:object:queue:using:) (或 addObserver(_:selector:name:object:),但是第一种风格更像 Swift。)

然后在您的 application(_:open:options:) 方法中,使用 `post(name:object:userInfo:) 或其变体之一,在 URL 打开方法为已调用。

(一般来说,应用程序委托(delegate)中应包含尽可能少的特定于应用程序的业务逻辑。通过使用 NotificationCenter,您可以编写应用程序委托(delegate),以便它不知道或关心哪个 View Controller 需要收到关于传入的“打开 URL”命令的通知。)

关于ios - 当数据改变时如何调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46044436/

相关文章:

iphone - UIButton 没有出现在 UItableView 最后一节的最后一行

ios - 无法从 tableview 加载详细信息 ViewController

ios - 选择一行是检查另一行的标记

ios - 发布版本中的 Liker 错误 - 函数签名专门化 <Arg[2] = Exploded>

iphone - 如何在一个供应配置文件下获得多个临时构建?

ios - 无法通过下标赋值 : subscript is get-only

ios - 使用 UIImage imageNamed : @"cardback" 时无法获取对象

ios - swift 3 : Tableview datasource methods "Overriding non-open instance method outside of its defining module" error

ios - 从 FMDB 数据库中获取数据

从 iOS 11 屏幕截图共享时,iOS 共享扩展崩溃