将今天通知(今日延期)中显示的数据发送到appdelegate方法

时间:2015-02-26 09:27:42

标签: ios today-extension

我正在使用今天的扩展

我今天在tableview中显示了事件列表通知。

点击我要发送的选定行事件appdelegate方法

单击选择行时,我在我的应用程序中导航并调用方法openurl 但我无法通过此方法或选定的行号获得选定的事件。

我们也可以从今天的扩展程序获取数据到我们的应用程序

我在todayviewcotroller中的当前代码是

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  {
      NSLog(@"%s",__PRETTY_FUNCTION__);
     [self.extensionContext openURL:[NSURL URLWithString:@"TestIt://"]
             completionHandler:^(BOOL success) {
     }];
}

单击事件时将行号发送到appdelegate方法(openurl)。

寻求帮助

2 个答案:

答案 0 :(得分:2)

您可以使用NSUserDefaults在应用和扩展程序之间存储数据。但首先,您需要启用应用程序组。

  

要启用数据共享,请使用Xcode或Developer门户为包含应用及其包含的应用扩展启用应用组。接下来,在门户中注册应用程序组,并指定要在包含的应用程序中使用的应用程序组。要了解如何使用应用程序组,请参阅权利密钥参考中的向应用程序组添加应用程序。

启用应用程序组后,应用程序扩展及其包含应用程序都可以使用NSUserDefaults API共享对用户首选项的访问权限。要启用此共享,请使用initWithSuiteName:方法实例化新的NSUserDefaults对象,并传入共享组的标识符。例如,共享扩展程序可能会使用以下代码更新用户最近使用的共享帐户:

//创建并共享对NSUserDefaults对象的访问权限。

NSUserDefaults *mySharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.example.domain.MyShareExtension"];

//使用共享用户默认值对象更新用户的帐户。

[mySharedDefaults setObject:theAccountName forKey:@"lastAccountName"];

以下是参考:https://developer.apple.com/library/mac/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW1

编辑:如何将自己注册到用户默认通知

 NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self
           selector:@selector(defaultsChanged:)  
               name:NSUserDefaultsDidChangeNotification
             object:nil];

答案 1 :(得分:0)

只要您确保在网址中包含重要数据,就可以使用网址执行此操作。例如,您可以将代码更改为:

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"TestIt://%d", indexPath.row];
[self.extensionContext openURL:url] completionHandler:nil];

现在,URL包含用户点击的行的索引。

然后确保您的应用响应该网址(您在目标设置中执行此操作),您将在应用代理中收到该网址。你会做这样的事情:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    NSString *tableIndexRow = [url resourceSpecifier];

    // tableIndexRow is a string that contains the tapped row number

    // Do something to handle the tap

    return YES;
}

通过这种方式,您的应用会知道用户点击了哪一行,并且它可以以适合您的应用的任何方式做出响应。有一个project on Github可以证明这一点。

如果您需要传递不同的数据,请在网址中包含您需要的任何内容,并修改您的应用委托以处理该数据。