【问题标题】:Using NSNotificationCenter to call method in main app from extensions widget?使用 NSNotificationCenter 从扩展小部件调用主应用程序中的方法?
【发布时间】:2015-04-12 15:51:37
【问题描述】:

我有一个小部件,我想回调到我的主应用程序,以便调用服务器来更新数据。我研究了委托,但将小部件的视图控制器注册为委托似乎不太实用。所以我继续尝试使用 NSNotificationCenter。我已经设置了它,但是没有调用选择器。在我的主要 iOS 应用程序中,我在 viewDidLoad 方法中有这个。

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(loadNewData:)
                                                 name:kUpdateData
                                               object:nil];

在那个文件的底部我有这个:

/**
 * Updates the table when the today widget is called for updated info
 **/
- (void)loadNewData:(NSNotification *) notification
{
    [self loadTableData];
}

这是在我的主应用程序中。现在,在我的通知中心小部件/扩展程序中,我拨打了这个电话:

[[NSNotificationCenter defaultCenter]
 postNotificationName:kUpdateData
 object:nil];

传入的 postNotificationName `kUpdateData' 是解析为 @"updateData" 的常量。我可以在调试器中看到正在调用 postNotificationName 方法,但主应用程序没有响应它(不管它是在前台还是后台)。我究竟做错了什么?

作为旁注,我这样做的唯一原因是消除对重复代码和重新实现我已经制作的东西的需要。

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    据我所知,扩展程序无法访问或调用主应用程序方法...可以做的是在扩展程序中执行服务器或在共享的 NSUserDefault 中设置一个值,因此当您的应用程序被带到前台时,您可以检查此值并相应地与服务器连接。

    【讨论】:

    • 我害怕那个。那没关系。我已经在使用 NSUserDefaults,我只是想这样做,这样我就可以保证我的应用程序拥有最新的数据。猜猜我可以将后台刷新时间设置为非默认值。除此之外,我不知道/无论如何也想不出获得最新数据。
    • 他们通过请求和发送数据来操作主应用程序!
    猜你喜欢
    • 2022-12-03
    • 2011-06-23
    • 2016-12-04
    • 1970-01-01
    • 2020-12-21
    • 2015-03-07
    • 2021-06-19
    • 2023-03-19
    • 2019-09-05
    相关资源
    最近更新 更多