Отправить данные, отображаемые в уведомлении за сегодняшний день (расширение за сегодня), в метод appdelegate
Я использую сегодня расширение
Я отображал список событий в табличном виде сегодня уведомления.
при нажатии на выбранное событие строки, которое я хочу отправить в методе appdelegate
Когда я нажимаю "Выбрать строку", я перемещаюсь в своем приложении и вызываю метод openurl, но не могу получить выбранное событие в этом методе или номер выбранной строки.
так что мы можем получить данные от сегодняшнего расширения нашего приложения
мой текущий код в сегодня viewcotroller
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"%s",__PRETTY_FUNCTION__);
[self.extensionContext openURL:[NSURL URLWithString:@"TestIt://"]
completionHandler:^(BOOL success) {
}];
}
при нажатии на событие отправьте номер строки в метод appdelegate (openurl).
жаждать помощи
2 ответа
Вы можете использовать NSUserDefaults для хранения данных между приложением и расширениями. Но сначала вам нужно включить группы приложений.
Чтобы включить общий доступ к данным, используйте XCode или портал разработчика, чтобы включить группы приложений для содержащего приложения и его расширений. Затем зарегистрируйте группу приложений на портале и укажите группу приложений для использования в содержащем приложении. Чтобы узнать о работе с группами приложений, см. Раздел Добавление приложения в группу приложений в справочнике ключей прав.
После включения групп приложений расширение приложения и содержащее его приложение могут использовать API NSUserDefaults для совместного доступа к пользовательским настройкам. Чтобы включить этот общий доступ, используйте initWithSuiteName: метод для создания нового объекта NSUserDefaults, передавая идентификатор общей группы. Например, расширение Share может обновить последнюю использованную учетную запись пользователя, используя код, подобный следующему:
// Создать и поделиться доступом к объекту 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];
Это можно сделать с помощью URL-адреса, если только вы обязательно включите в него важные данные. Например, вы можете изменить свой код так:
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"TestIt://%d", indexPath.row];
[self.extensionContext openURL:url] completionHandler:nil];
Теперь URL включает в себя индекс строки, по которой пользователь нажал.
Затем убедитесь, что ваше приложение отвечает на этот URL (что вы делаете в настройках цели), и вы получите этот 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;
}
Таким образом, ваше приложение будет знать, в какую строку нажал пользователь, и оно может ответить любым удобным для вас способом. На Github есть проект, который демонстрирует это.
Если вам нужно передать разные данные, включите в URL все, что вам нужно, и измените делегат приложения для обработки этих данных.