我正在使用今天的扩展
我今天在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)。
寻求帮助
答案 0 :(得分:2)
您可以使用NSUserDefaults在应用和扩展程序之间存储数据。但首先,您需要启用应用程序组。
要启用数据共享,请使用Xcode或Developer门户为包含应用及其包含的应用扩展启用应用组。接下来,在门户中注册应用程序组,并指定要在包含的应用程序中使用的应用程序组。要了解如何使用应用程序组,请参阅权利密钥参考中的向应用程序组添加应用程序。
启用应用程序组后,应用程序扩展及其包含应用程序都可以使用NSUserDefaults API共享对用户首选项的访问权限。要启用此共享,请使用initWithSuiteName:方法实例化新的NSUserDefaults对象,并传入共享组的标识符。例如,共享扩展程序可能会使用以下代码更新用户最近使用的共享帐户:
//创建并共享对NSUserDefaults对象的访问权限。
NSUserDefaults *mySharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.example.domain.MyShareExtension"];
//使用共享用户默认值对象更新用户的帐户。
[mySharedDefaults setObject:theAccountName forKey:@"lastAccountName"];
编辑:如何将自己注册到用户默认通知
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可以证明这一点。
如果您需要传递不同的数据,请在网址中包含您需要的任何内容,并修改您的应用委托以处理该数据。