最初のリサーチキットプロジェクトでは、リサーチキットの調査結果をjsonにシリアル化する必要がありました。調査回答をサーバーに送り返すには、このjsonデータが必要です。 ORKResultオブジェクトをシリアル化するには、関数ORKESerializer.JSONDataForObject(taskResult)を使用することをお勧めします。この関数は、カスタムオブジェクトを適切な有効なjsonオブジェクトに変換します。 ORKESerializerは実際にはResearchkitの一部ではありませんが、GitHubにあるORKTestというテストアプリケーションに含まれています。以下はこれを行うコードです。ORKESerializer Researchkit iOSデバイスを構築する際にエラーが発生するテストクラス
extension ViewController : ORKTaskViewControllerDelegate {
func taskViewController(taskViewController: ORKTaskViewController, didFinishWithReason reason: ORKTaskViewControllerFinishReason, error: NSError?) {
switch reason {
case .Completed:
let taskResult = taskViewController.result
let jsonData = try! ORKESerializer.JSONDataForObject(taskResult)
if let jsonString = NSString(data: jsonData, encoding: NSUTF8StringEncoding) {
print(jsonString)
}
break
case .Failed, .Discarded, .Saved:
break
}
//Handle results with taskViewController.result
taskViewController.dismissViewControllerAnimated(true, completion: nil)
}
このコードは、シミュレータで実行中に完全に正常に動作しています。しかし、iosデバイスのビルド中にエラーが発生しています。 ORKESerializer.hと.mファイルを私の素早いプロジェクトに追加し、ヘッダーをブリッジする際に.hをインポートしました。以下は、コンパイル中に投げているエラーです。
{ Undefined symbols for architecture armv7: "_OBJC_CLASS_$_ORKLocation", referenced from: objc-class-ref in ORKESerialization.o "_OBJC_CLASS_$_ORKConfirmTextAnswerFormat", referenced from: objc-class-ref in ORKESerialization.o ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation) }
いずれかがこの問題を解決する方法を知っていますか?
この問題は安定したブランチで修正されています:https://github.com/ResearchKit/ResearchKit/commit/23900bed0e5582a193dd6f6f72a0cb2afd303c35 – Yuan