从View Controller获取信息到AppDelegate

时间:2015-04-24 13:11:24

标签: ios swift appdelegate

方案如下:

我有一个分析输入声音的视图控制器。识别完声音后,我会设置一个本地通知。

var notification: UILocalNotification = UILocalNotification()
notification.fireDate = NSDate(timeIntervalSinceNow: 0.0)
notification.alertTitle = knn as String
UIApplication.sharedApplication().scheduleLocalNotification(notification)

这会调用AppDelegate中的application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification)函数。

现在,我还希望根据用户在通知中选择的内容在数据库中保存一些数据。 我的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.zcrArrayvc.mfccArray等。

我的故事板看起来像这样: storyboard

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:1)

根据你的故事板self.window?.rootViewController是tabbarcontroller。您应该获得tabbarcontroller的呈现视图控制器,它是导航控制器之一。然后获取导航控制器的呈现视图控制器,该控制器应该是您分析声音的视图控制器。

/ ***编辑

由于您正在使用故事板,请尝试使用此片段代码(请记住,您使用故事板和视图控制器的正确名称):

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; UIViewController *uvc = [storyboard instantiateViewControllerWithIdentifier:@"Details"]; [self.window.rootViewController presentViewController:uvc animated:YES completion:nil];

编辑*** /

如果要保存的值为property list types,则可以使用本地通知的userInfo属性发送它们。