不断更新应用扩展

Posted

技术标签:

【中文标题】不断更新应用扩展【英文标题】:Continuously update app extension 【发布时间】:2014-10-01 18:23:59 【问题描述】:

我为通知中心创建了一个应用程序扩展,它实际上工作正常,除了我无法连续更新其UILabel。我需要这样做的原因是因为我的应用程序有一个不断变化的数据集,我想在扩展程序中显示它。

我尝试使用NSUserDefaultsDidChangeNotification更新扩展中的数据,但它不起作用。这是我的代码:

注册更改通知(扩展)

- (void)viewDidLoad

    [super viewDidLoad];

    ...

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(userDefaultsDidChange:)
                                                 name:NSUserDefaultsDidChangeNotification
                                               object:nil];


- (void)userDefaultsDidChange:(NSNotification *)notification

    NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.company.app"];
    //update label

向扩展发送数据

- (void)updateData

    NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.company.app"];
    [sharedDefaults setInteger:seconds forKey:@"seconds"];
    ...
    [sharedDefaults synchronize];

我在主应用程序和扩展程序中都正确设置了应用程序组,它们都访问同一个组。

有谁知道为什么这不起作用或者是否有其他方法可以做到这一点? 非常感谢!

【问题讨论】:

那么你是在暗示你的userDefaultsDidChange 函数没有触发吗? 是的。 viewDidLoad 方法将被调用,因此它应该注册通知,但它从未被调用。 我认为NSUserDefaultsDidChangeNotification 在扩展中使用共享默认数据库存在一些问题。如 - 它不起作用,你无能为力。您的代码没有任何问题。 我也有同样的问题。我的 NSUserDefaultsDidChangeNotification 处理程序没有被调用。但是,使用重复计时器并重新阅读确实有效……我不喜欢轮询…… @freshking:你有解决办法吗? 【参考方案1】:

我在我的 WatchKit 应用程序中遇到了同样的问题,NSUserDefaultsDidChangeNotification 确实不会在共享 NSUserDefaults 的扩展中被触发。

我发现的最佳解决方案是一个名为 MMWormhole 的库,它使用 CFNotificationCenter Darwin Notifications 来实现这一点。

【讨论】:

刚刚偶然发现这个问题与 OP 有相同的问题。这看起来很酷!我稍后会试一试:)

以上是关于不断更新应用扩展的主要内容,如果未能解决你的问题,请参考以下文章

Windows 10 移动应用程序扩展执行不断被拒绝

容器和应用程序:扩展重构或重建?

通过应用程序不断更新数据库,效率不高?

Google Play 政策更新 | 扩展目标 API 级别要求以增进用户安全

Google Play 政策更新 | 扩展目标 API 级别要求以增进用户安全

PDO 扩展配置 - 我在我的 PHP 应用程序中不断收到 PDOException“找不到驱动程序”