【问题标题】:Implement ResearchKit in a ViewController to make a survey在 ViewController 中实现 ResearchKit 以进行调查
【发布时间】:2016-02-24 02:09:08
【问题描述】:

编辑:不确定这是否是我的问题的根源,但应用程序委托中的这段代码是否会成为它不起作用的原因?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.
    let navigationController = self.window!.rootViewController as! UINavigationController
    let controller = navigationController.topViewController as! HomeViewController
    controller.managedObjectContext = self.managedObjectContext
    return true

}

我正在尝试将调查功能添加到集成了 ResearchKit 的应用程序中。我已经阅读了 Ray Wenderlich 的设置指南和其他一些教程。然而,当我过渡到一个我想开发的应用程序时,我有点卡住了。

我收到一个错误: Cannot assign value of type 'HomeviewController to type 'ORKTaskViewControllerDelegate?'

这是我正在使用的代码:

class HomeViewController: UIViewController {
var managedObjectContext: NSManagedObjectContext?

@IBAction func surveyTapped(sender: AnyObject) {

    let taskViewController = ORKTaskViewController(task: SurveyTask, taskRunUUID: nil)
    taskViewController.delegate = self
    presentViewController(taskViewController, animated: true, completion: nil)

}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.destinationViewController.isKindOfClass(NewRideViewController) {
        if let newRideViewController = segue.destinationViewController as? NewRideViewController {
            newRideViewController.managedObjectContext = managedObjectContext
        }
    }
}
}

基于与此错误语法的类似问题,用户添加了另一个控制器类,但我超出了我的范围。非常感谢您的帮助,谢谢 StackExchange!

【问题讨论】:

    标签: ios swift researchkit


    【解决方案1】:

    看起来你还没有扩展你的视图控制器来实现ORKTaskViewController的委托,即ORKTaskViewControllerDelegate,你的VC代码应该如下 -

    import ResearchKit
    
    class HomeVC: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    
        @IBAction func surveyTapped(sender: AnyObject) {
            let taskViewController = ORKTaskViewController(task: SurveyTask, taskRunUUID: nil)
            taskViewController.delegate = self
            presentViewController(taskViewController, animated: true, completion: nil)
        }
    
    }
    
    extension HomeVC: ORKTaskViewControllerDelegate {
    
        func taskViewController(taskViewController: ORKTaskViewController, didFinishWithReason reason: ORKTaskViewControllerFinishReason, error: NSError?) {
    
        }
    
    }
    

    【讨论】:

    • 感谢您抽出宝贵时间回复并提供代码!我已经添加了您的建议,当我单击 survey 按钮时,应用程序终止并给出 Thread 1: signal SIGABRT 错误,调试控制台提供以下消息:由于未捕获的异常“NSGenericException”而终止应用程序,原因:“每个步骤都应该有一个唯一的标识符” 我认为这可能是我删除了插座和代码并正确重新添加插座的连接。你知道为什么会抛出这个错误吗?
    • 没关系,通过调试器输出排序,找到了罪魁祸首。感谢您的帮助!
    猜你喜欢
    • 2020-05-15
    • 2019-11-08
    • 2014-12-23
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    相关资源
    最近更新 更多