2016-12-06 3 views
0

Когда я нажимаю кнопку «Согласен», она должна перейти к соглашениюCompletionStep, но она соглашается не согласиться. Шаг. Пожалуйста, кто-нибудь может указать, в чем проблема?У меня возникли проблемы с функцией predicateForConsent ORKResultPredicate

let consentTask = ORKNavigableOrderedTask(identifier: String(describing:Identifier.consentTask), steps: [reviewConsentStep, disAgreeStep, completionStep]) 

resultSelector = ORKResultSelector(
    resultIdentifier: String(
     describing: Identifier.consentReviewStep)) 
let predicateAgree = ORKResultPredicate.predicateForConsent(
    with: resultSelector, didConsent: true) 

let agreePredicateRule = ORKPredicateStepNavigationRule(
    resultPredicatesAndDestinationStepIdentifiers: [ 
     (predicateAgree, 
     String(describing: Identifier.consentCompletionStep))]) 

consentTask.setNavigationRule(
    agreePredicateRule, 
    forTriggerStepIdentifier:String(
     describing:Identifier.consentReviewStep)) 

let consentDirectRule = ORKDirectStepNavigationRule(
    destinationStepIdentifier: ORKNullStepIdentifier) 
consentTask.setNavigationRule(
    consentDirectRule, 
    forTriggerStepIdentifier:String(
     describing:Identifier.consentDisagreeStep)) 
+0

Вы можете обратить этот порядок добавления 'Rule' и проверить. –

+0

Итак, я переместил directRule над predicateRule, но он не работает. – iarpits

ответ

0

Проблема заключается в том, что resultSelector передается +predicateForConsentWithResultSelector:didConsent: должен обеспечить желаемый идентификатор шага (stepIdentifier аргумент) и требуемый идентификатор подписи (resultIdentifier аргумент).

Вместо:

let resultSelector = ORKResultSelector(resultIdentifier:String(describing: Identifier.consentReviewStep)) 
let predicateAgree = ORKResultPredicate.predicateForConsent(with: resultSelector, didConsent: true) 

Оно должно быть:

let resultSelector = ORKResultSelector(stepIdentifier: String(describing: Identifier.consentReviewStep), resultIdentifier: signature.identifier) 
let predicateAgree = ORKResultPredicate.predicateForConsent(with: resultSelector, didConsent: true)