Сценарий выглядит следующим образом:Получение информации от контроллера View до AppDelegate
У меня есть контроллер просмотра, который анализирует входные звуки. Как только звук распознается, я устанавливаю локальное уведомление так.
var notification: UILocalNotification = UILocalNotification()
notification.fireDate = NSDate(timeIntervalSinceNow: 0.0)
notification.alertTitle = knn as String
UIApplication.sharedApplication().scheduleLocalNotification(notification)
Это вызывает application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification)
функцию в AppDelegate.
Теперь я также хочу сохранить некоторые данные в базе данных в зависимости от того, что пользователь выбрал в уведомлении. Мои AppDelegate-х didReceiveLocalNotification
:
var state: UIApplicationState = application.applicationState
if state == .Active {
var alert = UIAlertController(title: "Alert", message: notification.alertTitle, preferredStyle: .Alert)
var correct = UIAlertAction(title: "Correct", style: .Default, handler: { (test) -> Void in
//create a new sound in context
var newSound = Sound.createInManagedObjectContext(self.managedObjectContext!, title: notification.alertTitle, zcr: vc.zcrArray, spectralCentroid: vc.scArray, spectralFlatness: vc.sfArray, mfcc: vc.mfccArray, spectralSlope: vc.ssArray)
var error : NSError?
self.managedObjectContext!.save(&error)
})
var wrong = UIAlertAction(title: "Incorrect", style: .Default, handler: nil)
alert.addAction(wrong)
alert.addAction(correct)
var view = self.window?.rootViewController
view?.presentViewController(alert, animated: true, completion: nil)
}
Для того, чтобы сохранить значения в базу данных, мне нужно, чтобы захватить их от контроллера представления. Но я не могу найти способ их получить. Я попытался использовать self.window?.rootViewController
, чтобы попытаться найти правильный контроллер, но безуспешно. Переменные, которые я пытаюсь сохранить, называются vc.zcrArray
, vc.mfccArray
и т. Д. В приведенном выше коде.
Моя раскадровка выглядит следующим образом:
Любые идеи, что я делаю неправильно?
Можете привести пример кода? Я попробовал все возможные комбинации, и я все равно получаю нуль. Я также думал о userInfo, но он принимает только один список, и мне нужно передать 4 ... – nevos
Userinfo - это nsdictionary, который принимает массивы, поэтому вы можете установить свои данные следующим образом: 'ln.userInfo = @ {@" zcr " : vc.zcrArray, @ "mfcc": vc.mfccArray}; ' –
Поскольку вы используете раскадровку, попробуйте использовать следующий фрагмент кода для получения viewcontroller (имейте в виду, что вы используете правильное имя для раскадровки и просмотра контроллер): 'UIStoryboard * раскадровка = [UIStoryboard раскадровкаWithName: @" Main "bundle: nil]; UIViewController * uvc = [storyboard instantiateViewControllerWithIdentifier: @ "Details"]; [self.window.rootViewController presentViewController: uvc animated: YES завершение: nil]; ' –