В obj-C, когда другое приложение iOS (вложение электронной почты, веб-ссылка) было использовано с файлом или ссылкой, связанной с моим приложением. Затем я поймал бы это на openURL или didFinishLaunchingWithOptions
и покажу a UIAlertView
, чтобы подтвердить, что пользователь хочет импортировать данные. Теперь, когда UIAlertView
обесценивается, я пытаюсь сделать то же самое, но не совсем уверен в наилучшем способе сделать это?
У меня возникли проблемы с отображением простого предупреждения, когда мое приложение получает данные из другого приложения. Этот код отлично работал в Objective-C с UIAlertView
:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
if (url)
{
self.URLString = [url absoluteString];
NSString *message = @"Received a data exchange request. Would you like to import it?";
importAlert = [[UIAlertView alloc] initWithTitle:@"Data Received" message:message delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
[importAlert show];
}
return YES;
}
Но когда я пытаюсь переключиться на UIAlertViewController
и Swift, я не могу найти простой способ отображения сообщения:
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
let URLString: String = url.absoluteString!
let message: String = "Received data. Would you like to import it?"
var importAlert: UIAlertController = UIAlertController(title: "Data Received", message: message, preferredStyle: UIAlertControllerStyle.Alert)
importAlert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
importAlert.addAction(UIAlertAction(title: "Ok", style: .Default, handler:
{ action in
switch action.style {
case .Default:
println("default")
case .Cancel:
println("cancel")
case .Destructive:
println("destructive")
}
}))
self.presentViewController(importAlert, animated: true, completion: nil)
return true
}
Я получаю ошибку времени компиляции, которая AppDelegate
не имеет члена с именем presentViewController
Я видел некоторые запутанные методы, чтобы получить AppDelegate
для отображения UIAlertViewController
в StackOverflow, но я надеялся, что что-то немного проще.
Все, что мне действительно нужно сделать, это показать пользователю быстрое сообщение о том, что у них есть некоторые данные и заставить их решить, что они хотят с ним делать. После этого мое приложение будет продолжать открываться и выходить на передний план (аналогичный код в didFinishLaunchingWithOptions
для холодного запуска) либо с новыми добавленными данными, либо не на основе выбора предупреждения.
Я могу указать глобальную переменную, которая проверяет все мои функции viewWillAppear
, но это было бы много дублирования, так как у меня есть 30 + просмотров.
Сообщите мне, есть ли у вас какие-либо идеи.
Спасибо
Грег