ORKResult Class Reference

Inherits from NSObject
Conforms to NSCopying
NSSecureCoding
Declared in ORKResult.h

The ORKResult class defines the attributes of a result from one step or a group of steps. When you use the ResearchKit framework APIs, you typically get a result from the result property of either ORKTaskViewController or ORKStepViewController. Certain types of results can contain other results, which together express a hierarchy; examples of these types of results are ORKCollectionResult subclasses, such as ORKStepResult and ORKTaskResult.

When you receive a result, you can store it temporarily by archiving it with NSKeyedArchiver, because all ORKResult objects implement NSSecureCoding. If you want to serialize the result object to other formats, you’re responsible for implementing this.

The result object hierarchy does not necessarily include all the data collected during a task. Some result objects, such as ORKFileResult, may refer to files in the filesystem that were generated during the task. These files are easy to find, because they are all located in the output directory of the task view controller.

It’s recommended that you use NSFileProtectionComplete (at a minimum) to protect these files, and that you similarly protect all serialization of ORKResult objects that you write to disk. It is also generally helpful to keep the results together with the referenced files as you submit them to a back-end server. For example, it can be convenient to zip all data corresponding to a particular task result into a single compressed archive.

Every object in the result hierarchy has an identifier that should correspond to the identifier of an object in the original step hierarchy. Similarly, every object has a start date and an end date that correspond to the range of times during which the result was collected. In an ORKStepResult object, for example, the start and end dates cover the range of time during which the step view controller was visible on screen.

When you implement a new type of step, it is usually helpful to create a new ORKResult subclass to hold the type of result data the step can generate, unless it makes sense to use an existing subclass. Return your custom result subclass as one of the results attached to the step’s ORKStepResult object.

Other Methods

– initWithIdentifier:

Returns an initialized result using the specified identifier.

- (instancetype)initWithIdentifier:(NSString *)identifier

Parameters

identifier

The unique identifier of the result.

Discussion

Typically, objects such as ORKStepViewController and ORKTaskViewController instantiate result (and ORKResult subclass) objects; you seldom need to instantiate a result object in your code.

Declared In

ORKResult.h

  identifier

A meaningful identifier for the result.

@property (nonatomic, copy) NSString *identifier

Discussion

The identifier can be used to identify the question that was asked or the task that was completed to produce the result. Typically, the identifier is copied from the originating object by the view controller or recorder that produces it.

For example, a task result receives its identifier from a task, a step result receives its identifier from a step, and a question result receives its identifier from a step or a form item. Results that are generated by recorders also receive an identifier that corresponds to that recorder.

Declared In

ORKResult.h

  startDate

The time when the task, step, or data collection began.

@property (nonatomic, copy, nullable) NSDate *startDate

Discussion

The value of this property is set by the view controller or recorder that produces the result, to indicate when data collection started.

Note that for instantaneous items, startDate and endDate can have the same value, and should generally correspond to the end of the instantaneous data collection period.

Declared In

ORKResult.h

  endDate

The time when the task, step, or data collection stopped.

@property (nonatomic, copy, nullable) NSDate *endDate

Discussion

The value of this property is set by the view controller or recorder that produces the result, to indicate when data collection stopped.

Note that for instantaneous items, startDate and endDate can have the same value, and should generally correspond to the end of the instantaneous data collection period.

Declared In

ORKResult.h

  userInfo

Metadata that describes the conditions under which the result was acquired.

@property (nonatomic, copy, nullable) NSDictionary *userInfo

Discussion

The userInfo dictionary can be set by the view controller or recorder that produces the result. However, it’s often a better choice to use a new ORKResult subclass for passing additional information back to code that uses the framework, because using typed accessors is safer than using a dictionary.

The user info dictionary must contain only keys and values that are suitable for property list or JSON serialization.

Declared In

ORKResult.h

Extension Methods

  saveable

A boolean value indicating whether this result can be saved in a save and restore procedure.

@property (nonatomic, readonly, getter=isSaveable) BOOL saveable

Discussion

This is currently considered a private method, but overriding the getter in a result is the correct way to prevent this result being considered as saveable for the purpose of deciding whether to offer a “Save” option when the user cancels a task in progress.

ORKResult subclasses should return YES if they have data that the user might want to be able to restore if the task were interrupted and later resumed from the current state.

Declared In

ORKResult_Private.h