update pod version and jazzy docs

This commit is contained in:
John Estropia
2019-03-31 00:29:43 +09:00
parent 6f290213fa
commit b2dba0d6fd
348 changed files with 59478 additions and 14559 deletions

View File

@@ -22,7 +22,7 @@
<a class="header-link" href="index.html">
CoreStore Docs
</a>
(88% documented)
(90% documented)
</p>
<p class="header-col--secondary">
@@ -55,9 +55,6 @@
<li class="nav-group-task">
<a class="nav-group-task-link" href="Classes/AsynchronousDataTransaction.html">AsynchronousDataTransaction</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Classes/AsynchronousDataTransaction/Result.html"> Result</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Classes/BaseDataTransaction.html">BaseDataTransaction</a>
</li>
@@ -181,9 +178,6 @@
<li class="nav-group-task">
<a class="nav-group-task-link" href="Classes/Entity.html">Entity</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Classes/ICloudStore.html">ICloudStore</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Classes/InMemoryStore.html">InMemoryStore</a>
</li>
@@ -251,9 +245,6 @@
<li class="nav-group-task">
<a class="nav-group-task-link" href="Enums.html#/s:9CoreStore8LogLevelO">LogLevel</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Enums/MigrationResult.html">MigrationResult</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Enums/MigrationType.html">MigrationType</a>
</li>
@@ -272,9 +263,6 @@
<li class="nav-group-task">
<a class="nav-group-task-link" href="Enums/SelectTerm.html">SelectTerm</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Enums/SetupResult.html">SetupResult</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Enums/TransformableContainer.html">TransformableContainer</a>
</li>
@@ -337,12 +325,18 @@
<li class="nav-group-task">
<a class="nav-group-task-link" href="Extensions/KeyPathString.html">KeyPathString</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Extensions/NSAttributeType.html">NSAttributeType</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Extensions/NSData.html">NSData</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Extensions/NSDate.html">NSDate</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Extensions/NSDeleteRule.html">NSDeleteRule</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Extensions/NSManagedObject.html">NSManagedObject</a>
</li>
@@ -373,6 +367,12 @@
<li class="nav-group-task">
<a class="nav-group-task-link" href="Extensions/RawRepresentable.html">RawRepresentable</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Extensions/Result.html">Result</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Extensions/Selector.html">Selector</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Extensions/Sequence.html">Sequence</a>
</li>
@@ -390,6 +390,15 @@
<li class="nav-group-name">
<a class="nav-group-name-link" href="Functions.html">Functions</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2neoiyAA5WhereVyxGAD10ExpressionVyx_q_q0_G_q0_tAA13DynamicObjectRzAA0dE5TraitR_AA22QueryableAttributeTypeR0_r1_lF">!=(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2neoiyAA5WhereVyxGAD10ExpressionVyx_q_q0_SgG_AHtAA13DynamicObjectRzAA0dE5TraitR_AA22QueryableAttributeTypeR0_r1_lF">!=(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2neoiyAA5WhereVyxGAD10ExpressionVyx_q_q0_SgG_q0_tAA13DynamicObjectRzAA0dE5TraitR_AA22QueryableAttributeTypeR0_r1_lF">!=(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2neoiyAA5WhereVyxGs7KeyPathCyxAA14ValueContainerO8OptionalCyx_q_GG_q_SgtAA0aB6ObjectCRbzAA23ImportableAttributeTypeR_r0_lF">!=(_:_:)</a>
</li>
@@ -420,6 +429,12 @@
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2neoiyAA5WhereVyxGs7KeyPathCyxq_SgG_So17NSManagedObjectIDCtSo0gH0CRbzAMRb_r0_lF">!=(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1loiyAA5WhereVyxGAD10ExpressionVyx_q_q0_G_q0_tAA13DynamicObjectRzAA0cD5TraitR_AA22QueryableAttributeTypeR0_SLR0_r1_lF">&lt;(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1loiyAA5WhereVyxGAD10ExpressionVyx_q_q0_SgG_q0_tAA13DynamicObjectRzAA0cD5TraitR_AA22QueryableAttributeTypeR0_SLR0_r1_lF">&lt;(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1loiyAA5WhereVyxGs7KeyPathCyxAA14ValueContainerO8OptionalCyx_q_GG_q_SgtAA0aB6ObjectCRbzAA23ImportableAttributeTypeR_r0_lF">&lt;(_:_:)</a>
</li>
@@ -432,6 +447,12 @@
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1loiyAA5WhereVyxGs7KeyPathCyxq_SgG_AHtSo15NSManagedObjectCRbzAA22QueryableAttributeTypeR_SLR_r0_lF">&lt;(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2leoiyAA5WhereVyxGAD10ExpressionVyx_q_q0_G_q0_tAA13DynamicObjectRzAA0dE5TraitR_AA22QueryableAttributeTypeR0_SLR0_r1_lF">&lt;=(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2leoiyAA5WhereVyxGAD10ExpressionVyx_q_q0_SgG_AHtAA13DynamicObjectRzAA0dE5TraitR_AA22QueryableAttributeTypeR0_SLR0_r1_lF">&lt;=(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2leoiyAA5WhereVyxGs7KeyPathCyxAA14ValueContainerO8OptionalCyx_q_GG_q_SgtAA0aB6ObjectCRbzAA23ImportableAttributeTypeR_r0_lF">&lt;=(_:_:)</a>
</li>
@@ -444,6 +465,15 @@
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2leoiyAA5WhereVyxGs7KeyPathCyxq_SgG_AHtSo15NSManagedObjectCRbzAA22QueryableAttributeTypeR_SLR_r0_lF">&lt;=(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2eeoiyAA5WhereVyxGAD10ExpressionVyx_q_q0_G_q0_tAA13DynamicObjectRzAA0dE5TraitR_AA22QueryableAttributeTypeR0_r1_lF">==(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2eeoiyAA5WhereVyxGAD10ExpressionVyx_q_q0_SgG_AHtAA13DynamicObjectRzAA0dE5TraitR_AA22QueryableAttributeTypeR0_r1_lF">==(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2eeoiyAA5WhereVyxGAD10ExpressionVyx_q_q0_SgG_q0_tAA13DynamicObjectRzAA0dE5TraitR_AA22QueryableAttributeTypeR0_r1_lF">==(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2eeoiyAA5WhereVyxGs7KeyPathCyxAA14ValueContainerO8OptionalCyx_q_GG_q_SgtAA0aB6ObjectCRbzAA23ImportableAttributeTypeR_r0_lF">==(_:_:)</a>
</li>
@@ -474,6 +504,12 @@
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2eeoiyAA5WhereVyxGs7KeyPathCyxq_SgG_So17NSManagedObjectIDCtSo0gH0CRbzAMRb_r0_lF">==(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1goiyAA5WhereVyxGAD10ExpressionVyx_q_q0_G_q0_tAA13DynamicObjectRzAA0cD5TraitR_AA22QueryableAttributeTypeR0_SLR0_r1_lF">&gt;(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1goiyAA5WhereVyxGAD10ExpressionVyx_q_q0_SgG_q0_tAA13DynamicObjectRzAA0cD5TraitR_AA22QueryableAttributeTypeR0_SLR0_r1_lF">&gt;(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1goiyAA5WhereVyxGs7KeyPathCyxAA14ValueContainerO8OptionalCyx_q_GG_q_SgtAA0aB6ObjectCRbzAA23ImportableAttributeTypeR_r0_lF">&gt;(_:_:)</a>
</li>
@@ -486,6 +522,12 @@
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1goiyAA5WhereVyxGs7KeyPathCyxq_SgG_AHtSo15NSManagedObjectCRbzAA22QueryableAttributeTypeR_SLR_r0_lF">&gt;(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2geoiyAA5WhereVyxGAD10ExpressionVyx_q_q0_G_q0_tAA13DynamicObjectRzAA0dE5TraitR_AA22QueryableAttributeTypeR0_SLR0_r1_lF">&gt;=(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2geoiyAA5WhereVyxGAD10ExpressionVyx_q_q0_SgG_AHtAA13DynamicObjectRzAA0dE5TraitR_AA22QueryableAttributeTypeR0_SLR0_r1_lF">&gt;=(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2geoiyAA5WhereVyxGs7KeyPathCyxAA14ValueContainerO8OptionalCyx_q_GG_q_SgtAA0aB6ObjectCRbzAA23ImportableAttributeTypeR_r0_lF">&gt;=(_:_:)</a>
</li>
@@ -498,6 +540,54 @@
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2geoiyAA5WhereVyxGs7KeyPathCyxq_SgG_AHtSo15NSManagedObjectCRbzAA22QueryableAttributeTypeR_SLR_r0_lF">&gt;=(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1toiyAA5WhereV10ExpressionVyx_AD12SingleTargetOyx_G9ValueTypeQy0_Gs7KeyPathCyxAA21RelationshipContainerO5ToOneCyx_q_GG_ANyq_q0_GtAA0aB6ObjectCRbzAWRb_0oH0Qy0_Rs_AA07AllowedaboijG0R0_r1_lF">~(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1toiyAA5WhereV10ExpressionVyx_AD12SingleTargetOyx_Gq0_Gs7KeyPathCyxq_G_ALyq_q0_GtSo15NSManagedObjectCRbzAPRb_AA020AllowedObjectiveCKeyH5ValueR0_r1_lF">~(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1toiyAA5WhereV10ExpressionVyx_AD12SingleTargetOyx_Gq0_Gs7KeyPathCyxq_SgG_ALyq_q0_GtSo15NSManagedObjectCRbzAQRb_AA020AllowedObjectiveCKeyH5ValueR0_r1_lF">~(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1toiyAA5WhereV10ExpressionVyx_AD16CollectionTargetOyx_G9ValueTypeQy0_Gs7KeyPathCyxAA21RelationshipContainerO5ToOneCyx_q_GG_ANyq_q0_GtAA0aB6ObjectCRbzAWRb_0oH0Qy0_Rs_AA07AllowedaboeijG0R0_r1_lF">~(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1toiyAA5WhereV10ExpressionVyx_AD16CollectionTargetOyx_G9ValueTypeQy1_GAFyx_q0_q_G_s7KeyPathCyq_q1_GtAA0aB6ObjectCRbzARRb_0kH0Qy1_Rs_AA0cD5TraitR0_AA07AllowedabkeijG0R1_r2_lF">~(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1toiyAA5WhereV10ExpressionVyx_AD16CollectionTargetOyx_G9ValueTypeQy1_GAFyx_q0_q_SgG_s7KeyPathCyq_q1_GtAA0aB6ObjectCRbzASRb_0kH0Qy1_Rs_AA0cD5TraitR0_AA07AllowedabkeijG0R1_r2_lF">~(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1toiyAA5WhereV10ExpressionVyx_AD16CollectionTargetOyx_G9ValueTypeQy2_GAFyx_q0_q1_G_s7KeyPathCyq_q2_GtAA0aB6ObjectCRbz0kH0Qy1_RszARRb_ASQy2_Rs_AA0cD5TraitR0_AA07AllowedabkeijG0R1_AA0mabkijG0R2_r3_lF">~(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1toiyAA5WhereV10ExpressionVyx_AD16CollectionTargetOyx_Gq0_Gs7KeyPathCyxq_G_ALyq_q0_GtSo15NSManagedObjectCRbzAPRb_AA027AllowedObjectiveCCollectiongH5ValueR0_r1_lF">~(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1toiyAA5WhereV10ExpressionVyx_AD16CollectionTargetOyx_Gq0_Gs7KeyPathCyxq_SgG_ALyq_q0_GtSo15NSManagedObjectCRbzAQRb_AA027AllowedObjectiveCCollectiongH5ValueR0_r1_lF">~(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1toiyAA5WhereV10ExpressionVyx_AD16CollectionTargetOyx_Gq1_GAFyx_q0_q_G_s7KeyPathCyq_q1_GtSo15NSManagedObjectCRbzAPRb_AA0cD5TraitR0_AA027AllowedObjectiveCCollectiongH5ValueR1_r2_lF">~(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1toiyAA5WhereV10ExpressionVyx_AD16CollectionTargetOyx_Gq1_GAFyx_q0_q_SgG_s7KeyPathCyq_q1_GtSo15NSManagedObjectCRbzAQRb_AA0cD5TraitR0_AA027AllowedObjectiveCCollectiongH5ValueR1_r2_lF">~(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1toiyAA5WhereV10ExpressionVyx_AD16CollectionTargetOyx_Gq2_GAFyx_q0_q1_G_s7KeyPathCyq_q2_GtSo15NSManagedObjectCRbzAPRb_AA0cD5TraitR0_AA027AllowedObjectiveCCollectiongH5ValueR1_AA0lm4CKeyhO0R2_r3_lF">~(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1toiyAA5WhereV10ExpressionVyx_q0_9ValueTypeQy1_GAFyx_q0_q_G_s7KeyPathCyq_q1_GtAA0aB6ObjectCRbzAORb_0iF0Qy1_Rs_AA0cD5TraitR0_AA07AllowedabighE0R1_r2_lF">~(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1toiyAA5WhereV10ExpressionVyx_q0_9ValueTypeQy1_GAFyx_q0_q_SgG_s7KeyPathCyq_q1_GtAA0aB6ObjectCRbzAPRb_0iF0Qy1_Rs_AA0cD5TraitR0_AA07AllowedabighE0R1_r2_lF">~(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1toiyAA5WhereV10ExpressionVyx_q0_q1_GAFyx_q0_q_G_s7KeyPathCyq_q1_GtSo15NSManagedObjectCRbzAMRb_AA0cD5TraitR0_AA020AllowedObjectiveCKeyF5ValueR1_r2_lF">~(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore1toiyAA5WhereV10ExpressionVyx_q0_q1_GAFyx_q0_q_SgG_s7KeyPathCyq_q1_GtSo15NSManagedObjectCRbzANRb_AA0cD5TraitR0_AA020AllowedObjectiveCKeyF5ValueR1_r2_lF">~(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2teoiyAA5WhereVyxGq0__s7KeyPathCyxAA14ValueContainerO8OptionalCyx_q_GGtAA0aB6ObjectCRbzAA23ImportableAttributeTypeR_7ElementQy0_Rs_STR0_r1_lF">~=(_:_:)</a>
</li>
@@ -525,11 +615,32 @@
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2teoiyAA5WhereVyxGq0__s7KeyPathCyxq_SgGtSo15NSManagedObjectCRbzAKRb_STR0_So0gH2IDC7ElementRt0_r1_lF">~=(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2teoiyAA5WhereVyxGq1__AD10ExpressionVyx_q_q0_GtAA13DynamicObjectRzAA0dE5TraitR_AA22QueryableAttributeTypeR0_7ElementQy1_Rs0_STR1_r2_lF">~=(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Functions.html#/s:9CoreStore2teoiyAA5WhereVyxGq1__AD10ExpressionVyx_q_q0_SgGtAA13DynamicObjectRzAA0dE5TraitR_AA22QueryableAttributeTypeR0_7ElementQy1_Rs0_STR1_r2_lF">~=(_:_:)</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="Protocols.html">Protocols</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols.html#/s:9CoreStore07AllowedaB28ObjectCollectionKeyPathValueP">AllowedCoreStoreObjectCollectionKeyPathValue</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols.html#/s:9CoreStore07AllowedaB18ObjectKeyPathValueP">AllowedCoreStoreObjectKeyPathValue</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols.html#/s:9CoreStore39AllowedObjectiveCCollectionKeyPathValueP">AllowedObjectiveCCollectionKeyPathValue</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols.html#/s:9CoreStore29AllowedObjectiveCKeyPathValueP">AllowedObjectiveCKeyPathValue</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols.html#/s:9CoreStore37AllowedOptionalObjectiveCKeyPathValueP">AllowedOptionalObjectiveCKeyPathValue</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/AnyWhereClause.html">AnyWhereClause</a>
</li>
@@ -605,9 +716,6 @@
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/GroupByClause.html">GroupByClause</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/ICloudStoreObserver.html">ICloudStoreObserver</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols.html#/s:9CoreStore23ImportableAttributeTypeP">ImportableAttributeType</a>
</li>
@@ -668,6 +776,9 @@
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols/WhereClauseType.html">WhereClauseType</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Protocols.html#/s:9CoreStore20WhereExpressionTraitP">WhereExpressionTrait</a>
</li>
</ul>
</li>
<li class="nav-group-name">
@@ -724,6 +835,15 @@
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/Where.html">Where</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/Where/Expression.html"> Expression</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/Where.html#/s:9CoreStore5WhereV12SingleTargetO"> SingleTarget</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Structs/Where.html#/s:9CoreStore5WhereV16CollectionTargetO"> CollectionTarget</a>
</li>
</ul>
</li>
<li class="nav-group-name">
@@ -738,12 +858,18 @@
<li class="nav-group-task">
<a class="nav-group-task-link" href="Typealiases.html#/s:9CoreStore13KeyPathStringa">KeyPathString</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Typealiases.html#/s:9CoreStore15MigrationResulta">MigrationResult</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Typealiases.html#/s:9CoreStore18ModelConfigurationa">ModelConfiguration</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Typealiases.html#/s:9CoreStore12ModelVersiona">ModelVersion</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Typealiases.html#/s:9CoreStore11SetupResulta">SetupResult</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="Typealiases.html#/s:9CoreStore22XcodeDataModelFileNamea">XcodeDataModelFileName</a>
</li>
@@ -764,12 +890,13 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<br />
<br />
<a href="https://travis-ci.org/JohnEstropia/CoreStore"><img alt="Build Status" src="https://img.shields.io/travis/JohnEstropia/CoreStore/master.svg?style=flat" /></a>
<a href="https://github.com/JohnEstropia/CoreStore/commits"><img alt="Last Commit" src="https://img.shields.io/github/last-commit/johnestropia/corestore.svg?style=flat" /></a>
<a href="http://cocoadocs.org/docsets/CoreStore"><img alt="Platform" src="https://img.shields.io/cocoapods/p/CoreStore.svg?style=flat" /></a>
<a href="https://raw.githubusercontent.com/JohnEstropia/CoreStore/master/LICENSE"><img alt="License" src="https://img.shields.io/cocoapods/l/CoreStore.svg?style=flat" /></a>
<br /><br />Dependency managers<br />
<a href="https://cocoapods.org/pods/CoreStore"><img alt="Cocoapods compatible" src="https://img.shields.io/cocoapods/v/CoreStore.svg?style=flat&label=Cocoapods" /></a>
<a href="https://github.com/Carthage/Carthage"><img alt="Carthage compatible" src="https://img.shields.io/badge/Carthage-compatible-16a085.svg?style=flat" /></a>
<a href="https://swiftpkgs.ng.bluemix.net/package/JohnEstropia/CoreStore"><img alt="Swift Package Manager compatible" src="https://img.shields.io/badge/Swift_Package_Manager-compatible-orange.svg?style=flat" /></a>
<a href="https://swift.org/source-compatibility/#current-list-of-projects"><img alt="Swift Package Manager compatible" src="https://img.shields.io/badge/Swift_Package_Manager-compatible-orange.svg?style=flat" /></a>
<br /><br />Contact<br />
<a href="http://swift-corestore-slack.herokuapp.com/"><img alt="Join us on Slack!" src="http://swift-corestore-slack.herokuapp.com/badge.svg" /></a>
<a href="https://twitter.com/JohnEstropia"><img alt="Reach me on Twitter!" src="https://img.shields.io/badge/twitter-%40JohnEstropia-3498db.svg" /></a>
@@ -777,11 +904,11 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
</p>
<ul>
<li><strong>Swift 4.2:</strong> iOS 9+ / macOS 10.10+ / watchOS 2.0+ / tvOS 9.0+</li>
<li>Other Swift versions: <a href="https://github.com/JohnEstropia/CoreStore/tree/4.2.3">Swift 3.2(version 4.2.3)</a></li>
<li><strong>Swift 5.0:</strong> iOS 10+ / macOS 10.12+ / watchOS 3.0+ / tvOS 10.0+</li>
<li>Previously supported Swift versions: <a href="https://github.com/JohnEstropia/CoreStore/tree/4.2.3">Swift 3.2</a>, <a href="https://github.com/JohnEstropia/CoreStore/tree/6.2.1">Swift 4.2</a></li>
</ul>
<p>Upgrading from CoreStore 4.2 (Swift 3.2) to 5.x (Swift 4.x)? Check out the <a href="#features">new features</a> and make sure to read the <a href="https://github.com/JohnEstropia/CoreStore/releases">Change logs</a>.</p>
<p>Upgrading from CoreStore 5.x (min iOS 9) to 6.x (min iOS 10)? Check out the <a href="#features">new features</a> and make sure to read the <a href="https://github.com/JohnEstropia/CoreStore/releases">Change logs</a>.</p>
<p>CoreStore is now part of the <a href="https://swift.org/source-compatibility/#current-list-of-projects">Swift Source Compatibility projects</a>.</p>
<h2 id='why-use-corestore' class='heading'>Why use CoreStore?</h2>
@@ -821,7 +948,6 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<ul>
<li><a href="#in-memory-store">In-memory store</a></li>
<li><a href="#local-store">Local store</a></li>
<li><a href="#icloud-store">iCloud store</a></li>
</ul></li>
<li><a href="#migrations">Migrations</a>
@@ -870,6 +996,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<li><a href="#observing-changes-and-notifications">Observing changes and notifications</a>
<ul>
<li><a href="#observe-a-single-property">Observe a single property</a></li>
<li><a href="#observe-a-single-object">Observe a single object</a></li>
<li><a href="#observe-a-list-of-objects">Observe a list of objects</a></li>
</ul></li>
@@ -922,11 +1049,11 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
</code></pre>
<p>Fetching objects (simple):</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">people</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span><span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">())</span>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">people</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span><span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">())</span>
</code></pre>
<p>Fetching objects (complex):</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">people</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">people</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">()</span>
<span class="o">.</span><span class="nf">where</span><span class="p">(\</span><span class="o">.</span><span class="n">age</span> <span class="o">&gt;</span> <span class="mi">30</span><span class="p">),</span>
<span class="o">.</span><span class="nf">orderBy</span><span class="p">(</span><span class="o">.</span><span class="nf">ascending</span><span class="p">(\</span><span class="o">.</span><span class="n">name</span><span class="p">),</span> <span class="o">.</span><span class="nf">descending</span><span class="p">(</span><span class="o">.</span><span class="p">\</span><span class="n">age</span><span class="p">)),</span>
@@ -935,7 +1062,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
</code></pre>
<p>Querying values:</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">maxAge</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryValue</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">maxAge</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryValue</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">()</span>
<span class="o">.</span><span class="nf">select</span><span class="p">(</span><span class="kt">Int</span><span class="o">.</span><span class="k">self</span><span class="p">,</span> <span class="o">.</span><span class="nf">maximum</span><span class="p">(\</span><span class="o">.</span><span class="n">age</span><span class="p">))</span>
<span class="p">)</span>
@@ -962,7 +1089,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
</tr>
<tr>
<td><code>NSPersistentStore</code><br />(<q>Configuration</q>s in the .xcdatamodeld file)</td>
<td><code><a href="Protocols/StorageInterface.html">StorageInterface</a></code> implementations<br />(<code><a href="Classes/InMemoryStore.html">InMemoryStore</a></code>, <code><a href="Classes/SQLiteStore.html">SQLiteStore</a></code>, <code><a href="Classes/ICloudStore.html">ICloudStore</a></code>)</td>
<td><code><a href="Protocols/StorageInterface.html">StorageInterface</a></code> implementations<br />(<code><a href="Classes/InMemoryStore.html">InMemoryStore</a></code>, <code><a href="Classes/SQLiteStore.html">SQLiteStore</a></code>, <code>ICloudStore</code>)</td>
</tr>
<tr>
<td><code>NSManagedObjectContext</code></td>
@@ -1063,7 +1190,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<p>💡By default, CoreStore will initialize <code>NSManagedObject</code>s from <em>.xcdatamodeld</em> files, but you can create models completely from source code using <code><a href="Classes/CoreStoreObject.html">CoreStoreObject</a></code>s and <code><a href="Classes/CoreStoreSchema.html">CoreStoreSchema</a></code>. To use this feature, refer to <a href="#type-safe-corestoreobjects">Type-safe <code><a href="Classes/CoreStoreObject.html">CoreStoreObject</a></code>s</a>.</p>
</blockquote>
<p>Notice that in our previous examples, <code>addStorageAndWait(_:)</code> and <code>addStorage(_:completion:)</code> both accept either <code><a href="Classes/InMemoryStore.html">InMemoryStore</a></code>, <code><a href="Classes/SQLiteStore.html">SQLiteStore</a></code>, or <code><a href="Classes/ICloudStore.html">ICloudStore</a></code>. These implement the <code><a href="Protocols/StorageInterface.html">StorageInterface</a></code> protocol.</p>
<p>Notice that in our previous examples, <code>addStorageAndWait(_:)</code> and <code>addStorage(_:completion:)</code> both accept either <code><a href="Classes/InMemoryStore.html">InMemoryStore</a></code>, <code><a href="Classes/SQLiteStore.html">SQLiteStore</a></code>, or <code>ICloudStore</code>. These implement the <code><a href="Protocols/StorageInterface.html">StorageInterface</a></code> protocol.</p>
<h3 id='in-memory-store' class='heading'>In-memory store</h3>
<p>The most basic <code><a href="Protocols/StorageInterface.html">StorageInterface</a></code> concrete type is the <code><a href="Classes/InMemoryStore.html">InMemoryStore</a></code>, which just stores objects in memory. Since <code><a href="Classes/InMemoryStore.html">InMemoryStore</a></code>s always start with a fresh empty data, they do not need any migration information.</p>
@@ -1104,66 +1231,6 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
</code></pre>
<p>If you have custom <code>NSIncrementalStore</code> or <code>NSAtomicStore</code> subclasses, you can implement this protocol and use it similarly to <code><a href="Classes/SQLiteStore.html">SQLiteStore</a></code>.</p>
<h3 id='icloud-store' class='heading'>iCloud Store</h3>
<blockquote>
<p>⚠️<strong>Important:</strong> The iCloud Store is being deprecated. Please use with caution. If you have any concerns please do send me a message on <a href="https://twitter.com/JohnEstropia">Twitter</a> or on the <a href="http://swift-corestore-slack.herokuapp.com/">CoreStore Slack Team</a></p>
</blockquote>
<p>As a counterpart to <code><a href="Protocols/LocalStorage.html">LocalStorage</a></code>, the <code><a href="Protocols/CloudStorage.html">CloudStorage</a></code> protocol abstracts stores managed in the cloud. CoreStore currently provides the concrete class <code><a href="Classes/ICloudStore.html">ICloudStore</a></code>. Unlike <code><a href="Classes/InMemoryStore.html">InMemoryStore</a></code> and <code><a href="Classes/SQLiteStore.html">SQLiteStore</a></code> though, the <code><a href="Classes/ICloudStore.html">ICloudStore</a></code>&lsquo;s initializer may return <code>nil</code> if the iCloud container could not be located or if iCloud is not available on the device:</p>
<pre class="highlight swift"><code><span class="k">guard</span> <span class="k">let</span> <span class="nv">storage</span> <span class="o">=</span> <span class="kt">ICloudStore</span><span class="p">(</span>
<span class="nv">ubiquitousContentName</span><span class="p">:</span> <span class="s">"MyAppCloudData"</span><span class="p">,</span> <span class="c1">// the name of the store in iCloud</span>
<span class="nv">ubiquitousContentTransactionLogsSubdirectory</span><span class="p">:</span> <span class="s">"logs/config1"</span><span class="p">,</span> <span class="c1">// optional. Subdirectory path for the transaction logs</span>
<span class="nv">ubiquitousContainerID</span><span class="p">:</span> <span class="s">"iCloud.com.mycompany.myapp.containername"</span><span class="p">,</span> <span class="c1">// optional. The container if your app has multiple ubiquity container identifiers in its entitlements</span>
<span class="nv">ubiquitousPeerToken</span><span class="p">:</span> <span class="s">"9614d658014f4151a95d8048fb717cf0"</span><span class="p">,</span> <span class="c1">// optional. A per-application salt to allow multiple apps on the same device to share a Core Data store integrated with iCloud</span>
<span class="nv">configuration</span><span class="p">:</span> <span class="s">"Config1"</span><span class="p">,</span> <span class="c1">// optional. Use entities from the "Config1" configuration in the .xcdatamodeld file</span>
<span class="nv">cloudStorageOptions</span><span class="p">:</span> <span class="o">.</span><span class="n">recreateLocalStoreOnModelMismatch</span> <span class="c1">// optional. Provides settings that tells the DataStack how to setup the persistent store</span>
<span class="p">)</span> <span class="k">else</span> <span class="p">{</span>
<span class="c1">// The iCloud container could not be located or if iCloud is not available on the device.</span>
<span class="c1">// Handle appropriately</span>
<span class="k">return</span>
<span class="p">}</span>
<span class="kt">CoreStore</span><span class="o">.</span><span class="nf">addStorage</span><span class="p">(,</span>
<span class="n">storage</span><span class="p">,</span>
<span class="nv">completion</span><span class="p">:</span> <span class="p">{</span> <span class="n">result</span> <span class="k">in</span>
<span class="k">switch</span> <span class="n">result</span> <span class="p">{</span>
<span class="k">case</span> <span class="o">.</span><span class="nf">success</span><span class="p">(</span><span class="k">let</span> <span class="nv">storage</span><span class="p">):</span> <span class="c1">// ...</span>
<span class="k">case</span> <span class="o">.</span><span class="nf">failure</span><span class="p">(</span><span class="k">let</span> <span class="nv">error</span><span class="p">):</span> <span class="c1">// ...</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">)</span>
</code></pre>
<p>If your app is using iCloud stores, you may want to be notified of particular iCloud events. The <code><a href="Protocols/ICloudStoreObserver.html">ICloudStoreObserver</a></code> functions are all optional, so you may implement only the ones your app is interested in:</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">protocol</span> <span class="kt">ICloudStoreObserver</span><span class="p">:</span> <span class="kd">class</span> <span class="p">{</span>
<span class="kd">func</span> <span class="nf">iCloudStoreWillFinishUbiquitousStoreInitialImport</span><span class="p">(</span><span class="n">storage</span> <span class="nv">storage</span><span class="p">:</span> <span class="kt">ICloudStore</span><span class="p">,</span> <span class="nv">dataStack</span><span class="p">:</span> <span class="kt">DataStack</span><span class="p">)</span>
<span class="kd">func</span> <span class="nf">iCloudStoreDidFinishUbiquitousStoreInitialImport</span><span class="p">(</span><span class="n">storage</span> <span class="nv">storage</span><span class="p">:</span> <span class="kt">ICloudStore</span><span class="p">,</span> <span class="nv">dataStack</span><span class="p">:</span> <span class="kt">DataStack</span><span class="p">)</span>
<span class="kd">func</span> <span class="nf">iCloudStoreWillAddAccount</span><span class="p">(</span><span class="n">storage</span> <span class="nv">storage</span><span class="p">:</span> <span class="kt">ICloudStore</span><span class="p">,</span> <span class="nv">dataStack</span><span class="p">:</span> <span class="kt">DataStack</span><span class="p">)</span>
<span class="kd">func</span> <span class="nf">iCloudStoreDidAddAccount</span><span class="p">(</span><span class="n">storage</span> <span class="nv">storage</span><span class="p">:</span> <span class="kt">ICloudStore</span><span class="p">,</span> <span class="nv">dataStack</span><span class="p">:</span> <span class="kt">DataStack</span><span class="p">)</span>
<span class="kd">func</span> <span class="nf">iCloudStoreWillRemoveAccount</span><span class="p">(</span><span class="n">storage</span> <span class="nv">storage</span><span class="p">:</span> <span class="kt">ICloudStore</span><span class="p">,</span> <span class="nv">dataStack</span><span class="p">:</span> <span class="kt">DataStack</span><span class="p">)</span>
<span class="kd">func</span> <span class="nf">iCloudStoreDidRemoveAccount</span><span class="p">(</span><span class="n">storage</span> <span class="nv">storage</span><span class="p">:</span> <span class="kt">ICloudStore</span><span class="p">,</span> <span class="nv">dataStack</span><span class="p">:</span> <span class="kt">DataStack</span><span class="p">)</span>
<span class="kd">func</span> <span class="nf">iCloudStoreWillRemoveContent</span><span class="p">(</span><span class="n">storage</span> <span class="nv">storage</span><span class="p">:</span> <span class="kt">ICloudStore</span><span class="p">,</span> <span class="nv">dataStack</span><span class="p">:</span> <span class="kt">DataStack</span><span class="p">)</span>
<span class="kd">func</span> <span class="nf">iCloudStoreDidRemoveContent</span><span class="p">(</span><span class="n">storage</span> <span class="nv">storage</span><span class="p">:</span> <span class="kt">ICloudStore</span><span class="p">,</span> <span class="nv">dataStack</span><span class="p">:</span> <span class="kt">DataStack</span><span class="p">)</span>
<span class="p">}</span>
</code></pre>
<p>To register your <code><a href="Protocols/ICloudStoreObserver.html">ICloudStoreObserver</a></code>, call <code>addObserver(_:)</code> on the <code><a href="Classes/ICloudStore.html">ICloudStore</a></code> instance:</p>
<pre class="highlight swift"><code><span class="k">guard</span> <span class="k">let</span> <span class="nv">storage</span> <span class="o">=</span> <span class="kt">ICloudStore</span><span class="p">(</span><span class="cm">/* ... */</span><span class="p">)</span> <span class="k">else</span> <span class="p">{</span>
<span class="k">return</span>
<span class="p">}</span>
<span class="n">storage</span><span class="o">.</span><span class="nf">addObserver</span><span class="p">(</span><span class="k">self</span><span class="p">)</span> <span class="c1">// assuming self implements ICloudStoreObserver</span>
<span class="kt">CoreStore</span><span class="o">.</span><span class="nf">addStorage</span><span class="p">(,</span>
<span class="n">storage</span><span class="p">,</span>
<span class="nv">completion</span><span class="p">:</span> <span class="p">{</span> <span class="n">result</span> <span class="k">in</span>
<span class="k">switch</span> <span class="n">result</span> <span class="p">{</span>
<span class="k">case</span> <span class="o">.</span><span class="nf">success</span><span class="p">(</span><span class="k">let</span> <span class="nv">storage</span><span class="p">):</span> <span class="c1">// ... You may also call storage.addObserver(_:) here</span>
<span class="k">case</span> <span class="o">.</span><span class="nf">failure</span><span class="p">(</span><span class="k">let</span> <span class="nv">error</span><span class="p">):</span> <span class="c1">// ...</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">)</span>
</code></pre>
<p>The <code><a href="Classes/ICloudStore.html">ICloudStore</a></code> only keeps weak references of the registered observers. You may call <code>removeObserver(_:)</code> for precise deregistration, but <code><a href="Classes/ICloudStore.html">ICloudStore</a></code> automatically removes deallocated observers.</p>
<h2 id='migrations' class='heading'>Migrations</h2>
<h3 id='declaring-model-versions' class='heading'>Declaring model versions</h3>
@@ -1326,7 +1393,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<span class="p">)</span>
</code></pre>
<p>The <code>completion</code> block reports a <code><a href="Enums/SetupResult.html">SetupResult</a></code> that indicates success or failure.</p>
<p>The <code>completion</code> block reports a <code><a href="Typealiases.html#/s:9CoreStore11SetupResulta">SetupResult</a></code> that indicates success or failure.</p>
<p>Notice that this method also returns an optional <code>Progress</code>. If <code>nil</code>, no migrations are needed, thus progress reporting is unnecessary as well. If not <code>nil</code>, you can use this to track migration progress by using standard KVO on the <code>&quot;fractionCompleted&quot;</code> key, or by using a closure-based utility exposed in <em>Progress+Convenience.swift</em>:</p>
<pre class="highlight swift"><code><span class="n">migrationProgress</span><span class="p">?</span><span class="o">.</span><span class="n">setProgressHandler</span> <span class="p">{</span> <span class="p">[</span><span class="k">weak</span> <span class="k">self</span><span class="p">]</span> <span class="p">(</span><span class="n">progress</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Void</span> <span class="k">in</span>
@@ -1339,7 +1406,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<p>This closure is executed on the main thread so UIKit and AppKit calls can be done safely.</p>
<h3 id='progressive-migrations' class='heading'>Progressive migrations</h3>
<p>By default, CoreStore uses Core Data&rsquo;s default automatic migration mechanism. In other words, CoreStore will try to migrate the existing persistent store until it matches the <code><a href="Classes/SchemaHistory.html">SchemaHistory</a></code>&rsquo;s <code>currentModelVersion</code>. If no mapping model path is found from the store&rsquo;s version to the data model&rsquo;s version, CoreStore gives up and reports an error.</p>
<p>By default, CoreStore uses Core Data&rsquo;s default automatic migration mechanism. In other words, CoreStore will try to migrate the existing persistent store until it matches the <code><a href="Classes/SchemaHistory.html">SchemaHistory</a></code>&lsquo;s <code>currentModelVersion</code>. If no mapping model path is found from the store&rsquo;s version to the data model&rsquo;s version, CoreStore gives up and reports an error.</p>
<p>The <code><a href="Classes/DataStack.html">DataStack</a></code> lets you specify hints on how to break a migration into several sub-migrations using a <code><a href="Structs/MigrationChain.html">MigrationChain</a></code>. This is typically passed to the <code><a href="Classes/DataStack.html">DataStack</a></code> initializer and will be applied to all stores added to the <code><a href="Classes/DataStack.html">DataStack</a></code> with <code>addSQLiteStore(...)</code> and its variants:</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">dataStack</span> <span class="o">=</span> <span class="kt">DataStack</span><span class="p">(</span><span class="nv">migrationChain</span><span class="p">:</span>
@@ -1434,7 +1501,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<span class="p">)</span>
</code></pre>
<p>For version migrations present in the <code><a href="Classes/DataStack.html">DataStack</a></code>&rsquo;s <code><a href="Structs/MigrationChain.html">MigrationChain</a></code> but not handled by any of the <code><a href="Classes/SQLiteStore.html">SQLiteStore</a></code>&rsquo;s <code>migrationMappingProviders</code> array, CoreStore will automatically try to use <code><a href="Classes/InferredSchemaMappingProvider.html">InferredSchemaMappingProvider</a></code> as fallback. Finally if the <code><a href="Classes/InferredSchemaMappingProvider.html">InferredSchemaMappingProvider</a></code> could not resolve any mapping, the migration will fail and the <code><a href="Classes/DataStack.html#/s:9CoreStore9DataStackC10addStorage_10completionyx_yAA11SetupResultOyxGctAA0F9InterfaceRzlF">DataStack.addStorage(...)</a></code> method will report the failure.</p>
<p>For version migrations present in the <code><a href="Classes/DataStack.html">DataStack</a></code>&rsquo;s <code><a href="Structs/MigrationChain.html">MigrationChain</a></code> but not handled by any of the <code><a href="Classes/SQLiteStore.html">SQLiteStore</a></code>&rsquo;s <code>migrationMappingProviders</code> array, CoreStore will automatically try to use <code><a href="Classes/InferredSchemaMappingProvider.html">InferredSchemaMappingProvider</a></code> as fallback. Finally if the <code><a href="Classes/InferredSchemaMappingProvider.html">InferredSchemaMappingProvider</a></code> could not resolve any mapping, the migration will fail and the <code><a href="Classes/DataStack.html#/s:9CoreStore9DataStackC10addStorage_10completionyx_ys6ResultOyxAA0aB5ErrorOGctAA0F9InterfaceRzlF">DataStack.addStorage(...)</a></code> method will report the failure.</p>
<p>For <code><a href="Classes/CustomSchemaMappingProvider.html">CustomSchemaMappingProvider</a></code>, more granular updates are supported through the dynamic objects <code>UnsafeSourceObject</code> and <code>UnsafeDestinationObject</code>. The example below allows the migration to conditionally ignore some objects:</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">person_v2_to_v3_mapping</span> <span class="o">=</span> <span class="kt">CustomSchemaMappingProvider</span><span class="p">(</span>
@@ -1643,7 +1710,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<p>To update an existing object, fetch the object&rsquo;s instance from the transaction:</p>
<pre class="highlight swift"><code><span class="kt">CoreStore</span><span class="o">.</span><span class="nf">perform</span><span class="p">(</span>
<span class="nv">asynchronous</span><span class="p">:</span> <span class="p">{</span> <span class="p">(</span><span class="n">transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Void</span> <span class="k">in</span>
<span class="k">let</span> <span class="nv">person</span> <span class="o">=</span> <span class="n">transaction</span><span class="o">.</span><span class="nf">fetchOne</span><span class="p">(</span>
<span class="k">let</span> <span class="nv">person</span> <span class="o">=</span> <span class="k">try</span> <span class="n">transaction</span><span class="o">.</span><span class="nf">fetchOne</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">()</span>
<span class="o">.</span><span class="nf">where</span><span class="p">(\</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s">"Jane Smith"</span><span class="p">)</span>
<span class="p">)</span>
@@ -1703,8 +1770,8 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<span class="kt">CoreStore</span><span class="o">.</span><span class="nf">perform</span><span class="p">(</span>
<span class="nv">asynchronous</span><span class="p">:</span> <span class="p">{</span> <span class="p">(</span><span class="n">transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Void</span> <span class="k">in</span>
<span class="n">transaction</span><span class="o">.</span><span class="nf">delete</span><span class="p">(</span><span class="n">john</span><span class="p">,</span> <span class="n">jane</span><span class="p">)</span>
<span class="c1">// transaction.delete([john, jane]) is also allowed</span>
<span class="k">try</span> <span class="n">transaction</span><span class="o">.</span><span class="nf">delete</span><span class="p">(</span><span class="n">john</span><span class="p">,</span> <span class="n">jane</span><span class="p">)</span>
<span class="c1">// try transaction.delete([john, jane]) is also allowed</span>
<span class="p">},</span>
<span class="nv">completion</span><span class="p">:</span> <span class="p">{</span> <span class="n">_</span> <span class="k">in</span> <span class="p">}</span>
<span class="p">)</span>
@@ -1713,7 +1780,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<p>If you do not have references yet to the objects to be deleted, transactions have a <code>deleteAll(...)</code> method you can pass a query to:</p>
<pre class="highlight swift"><code><span class="kt">CoreStore</span><span class="o">.</span><span class="nf">perform</span><span class="p">(</span>
<span class="nv">asynchronous</span><span class="p">:</span> <span class="p">{</span> <span class="p">(</span><span class="n">transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Void</span> <span class="k">in</span>
<span class="n">transaction</span><span class="o">.</span><span class="nf">deleteAll</span><span class="p">(</span>
<span class="k">try</span> <span class="n">transaction</span><span class="o">.</span><span class="nf">deleteAll</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">()</span>
<span class="o">.</span><span class="nf">where</span><span class="p">(\</span><span class="o">.</span><span class="n">age</span> <span class="o">&gt;</span> <span class="mi">30</span><span class="p">)</span>
<span class="p">)</span>
@@ -1759,7 +1826,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<span class="kt">CoreStore</span><span class="o">.</span><span class="nf">perform</span><span class="p">(</span>
<span class="nv">asynchronous</span><span class="p">:</span> <span class="p">{</span> <span class="p">(</span><span class="n">transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Void</span> <span class="k">in</span>
<span class="k">let</span> <span class="nv">jane</span> <span class="o">=</span> <span class="n">transaction</span><span class="o">.</span><span class="nf">fetchOne</span><span class="p">(</span>
<span class="k">let</span> <span class="nv">jane</span> <span class="o">=</span> <span class="k">try</span> <span class="n">transaction</span><span class="o">.</span><span class="nf">fetchOne</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">()</span>
<span class="o">.</span><span class="nf">where</span><span class="p">(\</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s">"Jane Smith"</span><span class="p">)</span>
<span class="p">)</span>
@@ -1977,17 +2044,17 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<h4 id='code-from-code-clause' class='heading'><code><a href="Structs/From.html">From</a></code> clause</h4>
<p>The search conditions for fetches and queries are specified using <em>clauses</em>. All fetches and queries require a <code><a href="Structs/From.html">From</a></code> clause that indicates the target entity type:</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">people</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span><span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">())</span>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">people</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span><span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">())</span>
</code></pre>
<p><code>people</code> in the example above will be of type <code>[MyPersonEntity]</code>. The <code>From&lt;MyPersonEntity&gt;()</code> clause indicates a fetch to all persistent stores that <code>MyPersonEntity</code> belong to.</p>
<p>If the entity exists in multiple configurations and you need to only search from a particular configuration, indicate in the <code><a href="Structs/From.html">From</a></code> clause the configuration name for the destination persistent store:</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">people</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span><span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(</span><span class="s">"Config1"</span><span class="p">))</span> <span class="c1">// ignore objects in persistent stores other than the "Config1" configuration</span>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">people</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span><span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(</span><span class="s">"Config1"</span><span class="p">))</span> <span class="c1">// ignore objects in persistent stores other than the "Config1" configuration</span>
</code></pre>
<p>or if the persistent store is the auto-generated <q>Default</q> configuration, specify <code>nil</code>:</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">person</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span><span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(</span><span class="kc">nil</span><span class="p">))</span>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">person</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span><span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(</span><span class="kc">nil</span><span class="p">))</span>
</code></pre>
<p>Now we know how to use a <code><a href="Structs/From.html">From</a></code> clause, let&rsquo;s move on to fetching and querying.</p>
@@ -2007,11 +2074,11 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<h4 id='code-where-code-clause' class='heading'><code><a href="Structs/Where.html">Where</a></code> clause</h4>
<p>The <code><a href="Structs/Where.html">Where</a></code> clause is CoreStore&rsquo;s <code>NSPredicate</code> wrapper. It specifies the search filter to use when fetching (or querying). It implements all initializers that <code>NSPredicate</code> does (except for <code>-predicateWithBlock:</code>, which Core Data does not support):</p>
<pre class="highlight swift"><code><span class="k">var</span> <span class="nv">people</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">var</span> <span class="nv">people</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(),</span>
<span class="kt">Where</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(</span><span class="s">"%K &gt; %d"</span><span class="p">,</span> <span class="s">"age"</span><span class="p">,</span> <span class="mi">30</span><span class="p">)</span> <span class="c1">// string format initializer</span>
<span class="p">)</span>
<span class="n">people</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<span class="n">people</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(),</span>
<span class="kt">Where</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(</span><span class="kc">true</span><span class="p">)</span> <span class="c1">// boolean initializer</span>
<span class="p">)</span>
@@ -2026,14 +2093,14 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
</code></pre>
<p>Starting CoreStore 5.0, <code><a href="Structs/Where.html">Where</a></code> clauses became more type-safe and are now generic types. To avoid verbose repetition of the generic object type, fetch methods now support <strong>Fetch Chain builders</strong>. We can also use Swift&rsquo;s Smart KeyPaths as the <code><a href="Structs/Where.html">Where</a></code> clause expression:</p>
<pre class="highlight swift"><code><span class="k">var</span> <span class="nv">people</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">var</span> <span class="nv">people</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">()</span>
<span class="o">.</span><span class="nf">where</span><span class="p">(\</span><span class="o">.</span><span class="n">age</span> <span class="o">&gt;</span> <span class="mi">30</span><span class="p">)</span> <span class="c1">// Type-safe!</span>
<span class="p">)</span>
</code></pre>
<p><code><a href="Structs/Where.html">Where</a></code> clauses also implement the <code>&amp;&amp;</code>, <code>||</code>, and <code>!</code> logic operators, so you can provide logical conditions without writing too much <code>AND</code>, <code>OR</code>, and <code>NOT</code> strings:</p>
<pre class="highlight swift"><code><span class="k">var</span> <span class="nv">people</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">var</span> <span class="nv">people</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">()</span>
<span class="o">.</span><span class="nf">where</span><span class="p">(\</span><span class="o">.</span><span class="n">age</span> <span class="o">&gt;</span> <span class="mi">30</span> <span class="o">&amp;&amp;</span> <span class="p">\</span><span class="o">.</span><span class="n">gender</span> <span class="o">==</span> <span class="s">"M"</span><span class="p">)</span>
<span class="p">)</span>
@@ -2043,7 +2110,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<h4 id='code-orderby-code-clause' class='heading'><code><a href="Structs/OrderBy.html">OrderBy</a></code> clause</h4>
<p>The <code><a href="Structs/OrderBy.html">OrderBy</a></code> clause is CoreStore&rsquo;s <code>NSSortDescriptor</code> wrapper. Use it to specify attribute keys in which to sort the fetch (or query) results with.</p>
<pre class="highlight swift"><code><span class="k">var</span> <span class="nv">mostValuablePeople</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">var</span> <span class="nv">mostValuablePeople</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(),</span>
<span class="kt">OrderBy</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(</span><span class="o">.</span><span class="nf">descending</span><span class="p">(</span><span class="s">"rating"</span><span class="p">),</span> <span class="o">.</span><span class="nf">ascending</span><span class="p">(</span><span class="s">"surname"</span><span class="p">))</span>
<span class="p">)</span>
@@ -2051,7 +2118,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<p>As seen above, <code><a href="Structs/OrderBy.html">OrderBy</a></code> accepts a list of <code>SortKey</code> enumeration values, which can be either <code>.ascending</code> or <code>.descending</code>.
As with <code><a href="Structs/Where.html">Where</a></code> clauses, CoreStore 5.0 turned <code><a href="Structs/OrderBy.html">OrderBy</a></code> clauses into generic types. To avoid verbose repetition of the generic object type, fetch methods now support <strong>Fetch Chain builders</strong>. We can also use Swift&rsquo;s Smart KeyPaths as the <code><a href="Structs/OrderBy.html">OrderBy</a></code> clause expression:</p>
<pre class="highlight swift"><code><span class="k">var</span> <span class="nv">people</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">var</span> <span class="nv">people</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">()</span>
<span class="o">.</span><span class="nf">orderBy</span><span class="p">(</span><span class="o">.</span><span class="nf">descending</span><span class="p">(\</span><span class="o">.</span><span class="n">rating</span><span class="p">),</span> <span class="o">.</span><span class="nf">ascending</span><span class="p">(\</span><span class="o">.</span><span class="n">surname</span><span class="p">))</span> <span class="c1">// Type-safe!</span>
<span class="p">)</span>
@@ -2062,7 +2129,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<span class="k">if</span> <span class="n">sortFromYoungest</span> <span class="p">{</span>
<span class="n">orderBy</span> <span class="o">+=</span> <span class="kt">OrderBy</span><span class="p">(</span><span class="o">.</span><span class="nf">ascending</span><span class="p">(\</span><span class="o">.</span><span class="n">age</span><span class="p">))</span>
<span class="p">}</span>
<span class="k">var</span> <span class="nv">mostValuablePeople</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<span class="k">var</span> <span class="nv">mostValuablePeople</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(),</span>
<span class="n">orderBy</span>
<span class="p">)</span>
@@ -2070,7 +2137,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<h4 id='code-tweak-code-clause' class='heading'><code><a href="Structs/Tweak.html">Tweak</a></code> clause</h4>
<p>The <code><a href="Structs/Tweak.html">Tweak</a></code> clause lets you, uh, <em>tweak</em> the fetch (or query). <code><a href="Structs/Tweak.html">Tweak</a></code> exposes the <code>NSFetchRequest</code> in a closure where you can make changes to its properties:</p>
<pre class="highlight swift"><code><span class="k">var</span> <span class="nv">people</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">var</span> <span class="nv">people</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(),</span>
<span class="kt">Where</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(</span><span class="s">"age &gt; %d"</span><span class="p">,</span> <span class="mi">30</span><span class="p">),</span>
<span class="kt">OrderBy</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(</span><span class="o">.</span><span class="nf">ascending</span><span class="p">(</span><span class="s">"surname"</span><span class="p">)),</span>
@@ -2083,7 +2150,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
</code></pre>
<p><code><a href="Structs/Tweak.html">Tweak</a></code> also supports <strong>Fetch Chain builders</strong>:</p>
<pre class="highlight swift"><code><span class="k">var</span> <span class="nv">people</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">var</span> <span class="nv">people</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(),</span>
<span class="o">.</span><span class="nf">where</span><span class="p">(\</span><span class="o">.</span><span class="n">age</span> <span class="o">&gt;</span> <span class="mi">30</span><span class="p">)</span>
<span class="o">.</span><span class="nf">orderBy</span><span class="p">(</span><span class="o">.</span><span class="nf">ascending</span><span class="p">(\</span><span class="o">.</span><span class="n">surname</span><span class="p">))</span>
@@ -2114,7 +2181,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<h4 id='code-select-lt-t-gt-code-clause' class='heading'><code><a href="Structs/Select.html">Select&lt;T&gt;</a></code> clause</h4>
<p>The <code><a href="Structs/Select.html">Select&lt;T&gt;</a></code> clause specifies the target attribute/aggregate key, as well as the expected return type: </p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">johnsAge</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryValue</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">johnsAge</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryValue</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(),</span>
<span class="kt">Select</span><span class="o">&lt;</span><span class="kt">Int</span><span class="o">&gt;</span><span class="p">(</span><span class="s">"age"</span><span class="p">),</span>
<span class="kt">Where</span><span class="p">(</span><span class="s">"name == %@"</span><span class="p">,</span> <span class="s">"John Smith"</span><span class="p">)</span>
@@ -2124,14 +2191,14 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<p>The example above queries the <q>age</q> property for the first object that matches the <code><a href="Structs/Where.html">Where</a></code> condition. <code>johnsAge</code> will be bound to type <code>Int?</code>, as indicated by the <code><a href="Structs/Select.html">Select&lt;Int&gt;</a></code> generic type. For <code>queryValue(...)</code>, types that conform to <code><a href="Protocols/QueryableAttributeType.html">QueryableAttributeType</a></code> are allowed as the return type (and therefore as the generic type for <code><a href="Structs/Select.html">Select&lt;T&gt;</a></code>).</p>
<p>For <code>queryAttributes(...)</code>, only <code>NSDictionary</code> is valid for <code><a href="Structs/Select.html">Select</a></code>, thus you are allowed to omit the generic type:</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">allAges</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryAttributes</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">allAges</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryAttributes</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(),</span>
<span class="kt">Select</span><span class="p">(</span><span class="s">"age"</span><span class="p">)</span>
<span class="p">)</span>
</code></pre>
<p>Starting CoreStore 5.0, query methods now support <strong>Query Chain builders</strong>. We can also use Swift&rsquo;s Smart KeyPaths to use in the expressions:</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">johnsAge</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryValue</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">johnsAge</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryValue</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">()</span>
<span class="o">.</span><span class="nf">select</span><span class="p">(\</span><span class="o">.</span><span class="n">age</span><span class="p">)</span> <span class="c1">// binds the result to Int</span>
<span class="o">.</span><span class="nf">where</span><span class="p">(\</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s">"John Smith"</span><span class="p">)</span>
@@ -2147,14 +2214,14 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<li><code>.minimum(...)</code></li>
<li><code>.sum(...)</code></li>
</ul>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">oldestAge</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryValue</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">oldestAge</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryValue</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(),</span>
<span class="kt">Select</span><span class="o">&lt;</span><span class="kt">Int</span><span class="o">&gt;</span><span class="p">(</span><span class="o">.</span><span class="nf">maximum</span><span class="p">(</span><span class="s">"age"</span><span class="p">))</span>
<span class="p">)</span>
</code></pre>
<p>For <code>queryAttributes(...)</code> which returns an array of dictionaries, you can specify multiple attributes/aggregates to <code><a href="Structs/Select.html">Select</a></code>:</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">personJSON</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryAttributes</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">personJSON</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryAttributes</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(),</span>
<span class="kt">Select</span><span class="p">(</span><span class="s">"name"</span><span class="p">,</span> <span class="s">"age"</span><span class="p">)</span>
<span class="p">)</span>
@@ -2174,7 +2241,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
</code></pre>
<p>You can also include an aggregate as well:</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">personJSON</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryAttributes</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">personJSON</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryAttributes</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(),</span>
<span class="kt">Select</span><span class="p">(</span><span class="s">"name"</span><span class="p">,</span> <span class="o">.</span><span class="nf">count</span><span class="p">(</span><span class="s">"friends"</span><span class="p">))</span>
<span class="p">)</span>
@@ -2194,7 +2261,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
</code></pre>
<p>The <code>&quot;count(friends)&quot;</code> key name was automatically used by CoreStore, but you can specify your own key alias if you need:</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">personJSON</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryAttributes</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">personJSON</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryAttributes</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(),</span>
<span class="kt">Select</span><span class="p">(</span><span class="s">"name"</span><span class="p">,</span> <span class="o">.</span><span class="nf">count</span><span class="p">(</span><span class="s">"friends"</span><span class="p">,</span> <span class="nv">as</span><span class="p">:</span> <span class="s">"friendsCount"</span><span class="p">))</span>
<span class="p">)</span>
@@ -2215,7 +2282,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<h4 id='code-groupby-code-clause' class='heading'><code><a href="Structs/GroupBy.html">GroupBy</a></code> clause</h4>
<p>The <code><a href="Structs/GroupBy.html">GroupBy</a></code> clause lets you group results by a specified attribute/aggregate. This is useful only for <code>queryAttributes(...)</code> since <code>queryValue(...)</code> just returns the first value.</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">personJSON</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryAttributes</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">personJSON</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryAttributes</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">(),</span>
<span class="kt">Select</span><span class="p">(</span><span class="s">"age"</span><span class="p">,</span> <span class="o">.</span><span class="nf">count</span><span class="p">(</span><span class="s">"age"</span><span class="p">,</span> <span class="nv">as</span><span class="p">:</span> <span class="s">"count"</span><span class="p">)),</span>
<span class="kt">GroupBy</span><span class="p">(</span><span class="s">"age"</span><span class="p">)</span>
@@ -2223,7 +2290,7 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
</code></pre>
<p>Starting CoreStore 5.0, <code><a href="Structs/GroupBy.html">GroupBy</a></code> clauses are now also generic types and now support <strong>Query Chain builders</strong>. We can also use Swift&rsquo;s Smart KeyPaths to use in the expressions:</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">personJSON</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryAttributes</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">personJSON</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">queryAttributes</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">()</span>
<span class="o">.</span><span class="nf">select</span><span class="p">(</span><span class="o">.</span><span class="nf">attribute</span><span class="p">(\</span><span class="o">.</span><span class="n">age</span><span class="p">),</span> <span class="o">.</span><span class="nf">count</span><span class="p">(\</span><span class="o">.</span><span class="n">age</span><span class="p">,</span> <span class="nv">as</span><span class="p">:</span> <span class="s">"count"</span><span class="p">))</span>
<span class="o">.</span><span class="nf">groupBy</span><span class="p">(\</span><span class="o">.</span><span class="n">age</span><span class="p">)</span>
@@ -2281,19 +2348,33 @@ Unleashing the real power of Core Data with the elegance and safety of Swift
<p>These are all implemented with <code>CustomDebugStringConvertible.debugDescription</code>, so they work with lldb&rsquo;s <code>po</code> command as well.</p>
<h2 id='observing-changes-and-notifications' class='heading'>Observing changes and notifications</h2>
<blockquote>
<p>(unavailable on macOS versions below 10.12)</p>
</blockquote>
<p>CoreStore provides type-safe wrappers for observing managed objects:</p>
<ul>
<li><code><a href="Classes/ObjectMonitor.html">ObjectMonitor</a></code>: use to monitor changes to a single <code>NSManagedObject</code> or <code><a href="Classes/CoreStoreObject.html">CoreStoreObject</a></code> instance (instead of Key-Value Observing)</li>
<li><code><a href="Classes/ListMonitor.html">ListMonitor</a></code>: use to monitor changes to a list of <code>NSManagedObject</code> or <code><a href="Classes/CoreStoreObject.html">CoreStoreObject</a></code> instances (instead of <code>NSFetchedResultsController</code>)</li>
</ul>
<h3 id='observe-a-single-property' class='heading'>Observe a single property</h3>
<p>To get notifications for single property changes in an object, there are two methods depending on the object&rsquo;s base class.</p>
<ul>
<li><p>For <code>NSManagedObject</code> subclasses: Use the standard KVO method:</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">observer</span> <span class="o">=</span> <span class="n">person</span><span class="o">.</span><span class="nf">observe</span><span class="p">(\</span><span class="o">.</span><span class="n">age</span><span class="p">,</span> <span class="nv">options</span><span class="p">:</span> <span class="p">[</span><span class="o">.</span><span class="k">new</span><span class="p">])</span> <span class="p">{</span> <span class="p">(</span><span class="n">person</span><span class="p">,</span> <span class="n">change</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="s">"Happy </span><span class="se">\(</span><span class="n">change</span><span class="o">.</span><span class="n">newValue</span><span class="se">)</span><span class="s">th birthday!"</span><span class="p">)</span>
<span class="p">}</span>
</code></pre></li>
<li><p>For <code><a href="Classes/CoreStoreObject.html">CoreStoreObject</a></code> subclasses: Call the <code>observe(...)</code> method directly on the property. You&rsquo;ll notice that the API itself is a bit similar to the KVO method:</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">observer</span> <span class="o">=</span> <span class="n">person</span><span class="o">.</span><span class="n">age</span><span class="o">.</span><span class="nf">observe</span><span class="p">(</span><span class="nv">options</span><span class="p">:</span> <span class="p">[</span><span class="o">.</span><span class="k">new</span><span class="p">])</span> <span class="p">{</span> <span class="p">(</span><span class="n">person</span><span class="p">,</span> <span class="n">change</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="s">"Happy </span><span class="se">\(</span><span class="n">change</span><span class="o">.</span><span class="n">newValue</span><span class="se">)</span><span class="s">th birthday!"</span><span class="p">)</span>
<span class="p">}</span>
</code></pre></li>
</ul>
<p>For both methods, you will need to keep a reference to the returned <code>observer</code> for the duration of the observation. </p>
<h3 id='observe-a-single-object' class='heading'>Observe a single object</h3>
<p>To observe an object, implement the <code><a href="Protocols/ObjectObserver.html">ObjectObserver</a></code> protocol and specify the <code>EntityType</code>:</p>
<p>To observe an object itself as a whole, implement the <code><a href="Protocols/ObjectObserver.html">ObjectObserver</a></code> protocol and specify the <code>EntityType</code>:</p>
<pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">MyViewController</span><span class="p">:</span> <span class="kt">UIViewController</span><span class="p">,</span> <span class="kt">ObjectObserver</span> <span class="p">{</span>
<span class="kd">func</span> <span class="nf">objectMonitor</span><span class="p">(</span><span class="nv">monitor</span><span class="p">:</span> <span class="kt">ObjectMonitor</span><span class="o">&lt;</span><span class="kt">MyPersonEntity</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">willUpdateObject</span> <span class="nv">object</span><span class="p">:</span> <span class="kt">MyPersonEntity</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// ...</span>
@@ -2446,14 +2527,13 @@ CoreStore.perform(
<td><pre lang=objc>
[CSCoreStore beginAsynchronous:^(CSAsynchronousDataTransaction *transaction) {
// ...
[transaction commitWithCompletion:^(CSSaveResult *result) {
if (result.isSuccess) {
NSLog(@"Done");
}
else if (result.isFailure) {
NSLog(@"error: %@", result.error);
}
}];
[transaction
commitWithSuccess:^{
NSLog(@"Done");
}
failure: ^(CSError *error) {
NSLog(@"error: %@", result.error);
}];
}];
</pre></td>
</tr>
@@ -2586,7 +2666,7 @@ CoreStore.perform(
</code></pre>
<p>as well as <code><a href="Structs/Where.html">Where</a></code> and <code><a href="Structs/OrderBy.html">OrderBy</a></code> clauses</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">puppies</span> <span class="o">=</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">puppies</span> <span class="o">=</span> <span class="k">try</span> <span class="kt">CoreStore</span><span class="o">.</span><span class="nf">fetchAll</span><span class="p">(</span>
<span class="kt">From</span><span class="o">&lt;</span><span class="kt">Dog</span><span class="o">&gt;</span><span class="p">()</span>
<span class="o">.</span><span class="nf">where</span><span class="p">(\</span><span class="o">.</span><span class="n">age</span> <span class="o">&lt;</span> <span class="mi">1</span><span class="p">)</span>
<span class="o">.</span><span class="nf">orderBy</span><span class="p">(</span><span class="o">.</span><span class="nf">ascending</span><span class="p">(\</span><span class="o">.</span><span class="n">age</span><span class="p">))</span>
@@ -2629,8 +2709,9 @@ CoreStore.perform(
<div class="aside aside-requires">
<p class="aside-title">Requires</p>
<ul>
<li>iOS 8 SDK and above</li>
<li>Swift 4 (Xcode 9+)</li>
<li>iOS 10 SDK and above</li>
<li>Swift 5.0 (Xcode 10+)</li>
<li>For previous Swift versions: <a href="https://github.com/JohnEstropia/CoreStore/tree/4.2.3">Swift 3.2</a>, <a href="https://github.com/JohnEstropia/CoreStore/tree/6.2.1">Swift 4.2</a></li>
</ul>
</div>
@@ -2647,7 +2728,7 @@ CoreStore.perform(
<h3 id='install-with-cocoapods' class='heading'>Install with CocoaPods</h3>
<p>In your <code>Podfile</code>, add</p>
<pre class="highlight plaintext"><code>pod 'CoreStore', '~&gt; 5.0'
<pre class="highlight plaintext"><code>pod 'CoreStore', '~&gt; 6.3'
</code></pre>
<p>and run </p>
@@ -2658,7 +2739,7 @@ CoreStore.perform(
<h3 id='install-with-carthage' class='heading'>Install with Carthage</h3>
<p>In your <code>Cartfile</code>, add</p>
<pre class="highlight plaintext"><code>github "JohnEstropia/CoreStore" &gt;= 5.0.0
<pre class="highlight plaintext"><code>github "JohnEstropia/CoreStore" &gt;= 6.3.0
</code></pre>
<p>and run </p>
@@ -2666,17 +2747,18 @@ CoreStore.perform(
</code></pre>
<p>This installs CoreStore as a framework. Declare <code>import CoreStore</code> in your swift file to use the library.</p>
<h4 id='install-with-swift-package-manager' class='heading'>Install with Swift Package Manager:</h4>
<pre class="highlight swift"><code><span class="nv">dependencies</span><span class="p">:</span> <span class="p">[</span>
<span class="o">.</span><span class="nf">package</span><span class="p">(</span><span class="nv">url</span><span class="p">:</span> <span class="s">"https://github.com/JohnEstropia/CoreStore.git"</span><span class="p">,</span> <span class="nv">from</span><span class="p">:</span> <span class="s">"6.3.0"</span><span class="p">))</span>
<span class="p">]</span>
</code></pre>
<p>Declare <code>import CoreStore</code> in your swift file to use the library.</p>
<h3 id='install-as-git-submodule' class='heading'>Install as Git Submodule</h3>
<pre class="highlight plaintext"><code>git submodule add https://github.com/JohnEstropia/CoreStore.git &lt;destination directory&gt;
</code></pre>
<p>Drag and drop <strong>CoreStore.xcodeproj</strong> to your project.</p>
<h4 id='to-install-as-a-framework' class='heading'>To install as a framework:</h4>
<p>Drag and drop <strong>CoreStore.xcodeproj</strong> to your project.</p>
<h4 id='to-include-directly-in-your-app-module' class='heading'>To include directly in your app module:</h4>
<p>Add all <em>.swift</em> files to your project.</p>
<h3 id='objective-c-support' class='heading'>Objective-C support</h3>
<p>To use the Objective-C syntax sugars, import <em>CoreStoreBridge.h</em> in your <em>.m</em> source files.</p>
@@ -2704,8 +2786,8 @@ CoreStore.perform(
</article>
</div>
<section class="footer">
<p>&copy; 2018 <a class="link" href="https://github.com/JohnEstropia" target="_blank" rel="external">John Estropia</a>. All rights reserved. (Last updated: 2018-12-19)</p>
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.9.4</a>, a <a class="link" href="https://realm.io" target="_blank" rel="external">Realm</a> project.</p>
<p>&copy; 2019 <a class="link" href="https://github.com/JohnEstropia" target="_blank" rel="external">John Estropia</a>. All rights reserved. (Last updated: 2019-03-31)</p>
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.9.5</a>, a <a class="link" href="https://realm.io" target="_blank" rel="external">Realm</a> project.</p>
</section>
</body>
</div>