mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-03-03 20:00:07 +01:00
Compare commits
276 Commits
4.0.0-beta
...
throwables
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
84f3740ea1 | ||
|
|
6dc48b6af7 | ||
|
|
09ce2816bf | ||
|
|
62e962eebe | ||
|
|
682472c1bd | ||
|
|
46ab70b839 | ||
|
|
ac8304f977 | ||
|
|
5777831565 | ||
|
|
42d1f41939 | ||
|
|
8c30ec3a3d | ||
|
|
237a1b648e | ||
|
|
614f1572c2 | ||
|
|
a48f16aa8c | ||
|
|
cdbadae002 | ||
|
|
4a28a39df6 | ||
|
|
5febf2542d | ||
|
|
c21ab11a41 | ||
|
|
10cd18dbf0 | ||
|
|
8409a13289 | ||
|
|
a9a73fa5c4 | ||
|
|
82cae2e11e | ||
|
|
42caee2418 | ||
|
|
1dea1d0d06 | ||
|
|
d344b9d878 | ||
|
|
95c1ce52cc | ||
|
|
cc346816d6 | ||
|
|
f14b561c33 | ||
|
|
6f655951aa | ||
|
|
ff8fbae568 | ||
|
|
4d4b02d076 | ||
|
|
06c0981ded | ||
|
|
20d581d536 | ||
|
|
45e110755d | ||
|
|
ab40532801 | ||
|
|
40f458a09c | ||
|
|
1ad233ca9d | ||
|
|
3a8e394272 | ||
|
|
1f54daa528 | ||
|
|
f25879b6fe | ||
|
|
8fa3109e91 | ||
|
|
808e8ff97a | ||
|
|
30685d4355 | ||
|
|
7152962026 | ||
|
|
91735e38d1 | ||
|
|
333a50ad9e | ||
|
|
b7a602fc67 | ||
|
|
2ff7ecef96 | ||
|
|
e3f9139304 | ||
|
|
4aa461872f | ||
|
|
3d43314076 | ||
|
|
7b1075b759 | ||
|
|
0c29e07ddb | ||
|
|
ce91cf22f9 | ||
|
|
2dd033c002 | ||
|
|
c7fcba112e | ||
|
|
c8b1c4358f | ||
|
|
5431e2e974 | ||
|
|
83e6082c56 | ||
|
|
c7bdbbde57 | ||
|
|
abf15c8aa8 | ||
|
|
d9db7e4a82 | ||
|
|
65dbc22ddd | ||
|
|
51961dd737 | ||
|
|
18a7055cdf | ||
|
|
4b9fddad6a | ||
|
|
fbe7bd7bf8 | ||
|
|
15edabdbb5 | ||
|
|
f447bcfb95 | ||
|
|
15e5e4fdf6 | ||
|
|
583c6b7249 | ||
|
|
18b933957e | ||
|
|
2c7039232e | ||
|
|
d3b3b5ff4a | ||
|
|
d90e8d1303 | ||
|
|
b55dd13dff | ||
|
|
66dd5b6f27 | ||
|
|
49c4b770eb | ||
|
|
662aaa1e75 | ||
|
|
dd4e47d7f9 | ||
|
|
9ea5073bc8 | ||
|
|
e314db8f56 | ||
|
|
48d936d068 | ||
|
|
b2ff8a15ef | ||
|
|
8a4d1cd7c6 | ||
|
|
8ce26c213d | ||
|
|
f3816b9abf | ||
|
|
21961780d4 | ||
|
|
305e2b61a0 | ||
|
|
0430f66240 | ||
|
|
65772edd00 | ||
|
|
02d7870d75 | ||
|
|
aca1709e13 | ||
|
|
b6ee0b014f | ||
|
|
e37186da73 | ||
|
|
588fa35c84 | ||
|
|
f6614cda66 | ||
|
|
639574d8c2 | ||
|
|
094703155c | ||
|
|
6dd254e713 | ||
|
|
204025721c | ||
|
|
27ffc1d225 | ||
|
|
ba6f0c39d5 | ||
|
|
ab2eac8f6c | ||
|
|
f460a0b30f | ||
|
|
50bc3ace06 | ||
|
|
d2ddf2002f | ||
|
|
b4117eeb02 | ||
|
|
106275b2dd | ||
|
|
08d9298be0 | ||
|
|
ff0c4d94fc | ||
|
|
50e50c0613 | ||
|
|
5c8a0e425b | ||
|
|
03b71caf7e | ||
|
|
7ff29d6086 | ||
|
|
8d86425875 | ||
|
|
97242d9726 | ||
|
|
780ff4e60b | ||
|
|
11743dfb5f | ||
|
|
9eaf85388c | ||
|
|
06635c9d2f | ||
|
|
1d2eef7894 | ||
|
|
85ed815ec2 | ||
|
|
096e5493a6 | ||
|
|
0aa8c03424 | ||
|
|
4ead3c34dd | ||
|
|
645034dde5 | ||
|
|
85706a3c57 | ||
|
|
c5ae4606b9 | ||
|
|
fa682215c5 | ||
|
|
e814733ae9 | ||
|
|
e2236698fa | ||
|
|
be5da632b3 | ||
|
|
dc73cd6dd9 | ||
|
|
7beb3bec75 | ||
|
|
53100b202d | ||
|
|
cc84b1f8bd | ||
|
|
474f52ed2b | ||
|
|
16225fc4c6 | ||
|
|
03bb7619da | ||
|
|
1bfb7451c3 | ||
|
|
3e082d5ed4 | ||
|
|
e45d67252c | ||
|
|
3d427c29c4 | ||
|
|
1068517b94 | ||
|
|
0d23ce1598 | ||
|
|
fd1ce20863 | ||
|
|
2c5fa63f40 | ||
|
|
78e43a37a5 | ||
|
|
fde85a9743 | ||
|
|
dbbc0adae5 | ||
|
|
2a62770552 | ||
|
|
f436b26e8e | ||
|
|
c566226747 | ||
|
|
cd405e038e | ||
|
|
92a37053b0 | ||
|
|
0b57cff27d | ||
|
|
3ebc44b546 | ||
|
|
68f1027ba7 | ||
|
|
005729be85 | ||
|
|
8bac4aa901 | ||
|
|
da170c7e51 | ||
|
|
211e69023e | ||
|
|
2912dcf010 | ||
|
|
3e00a3da06 | ||
|
|
a33e248828 | ||
|
|
75e14fbbed | ||
|
|
9922deac4d | ||
|
|
86be046c9f | ||
|
|
0f10bc3349 | ||
|
|
9685f0aef2 | ||
|
|
1e51000155 | ||
|
|
3bd459bb1a | ||
|
|
c89bc3c227 | ||
|
|
0f405a50aa | ||
|
|
f5e1643ef7 | ||
|
|
f62137fb58 | ||
|
|
37fbedd799 | ||
|
|
28b43f33fa | ||
|
|
81a72f29ea | ||
|
|
f7aaf4fb2a | ||
|
|
a52acf2ebd | ||
|
|
74c64619c3 | ||
|
|
4a5bc6450b | ||
|
|
fe69e7c6c4 | ||
|
|
ccf7c62aad | ||
|
|
f36cb8af63 | ||
|
|
10ccadd96c | ||
|
|
5c0e78bd53 | ||
|
|
8a09688117 | ||
|
|
a366bcf1a3 | ||
|
|
fcd4be9011 | ||
|
|
535eb76adc | ||
|
|
c6e68ac24f | ||
|
|
aff966aac9 | ||
|
|
32743b3aee | ||
|
|
a20ad87583 | ||
|
|
a11915db12 | ||
|
|
961f39a806 | ||
|
|
3096cb784c | ||
|
|
809aa4ff96 | ||
|
|
8d926d25ec | ||
|
|
790454f514 | ||
|
|
9a38707c58 | ||
|
|
fb7e2f7f7f | ||
|
|
f72efc80b2 | ||
|
|
fcda5399da | ||
|
|
fd3a9b00ec | ||
|
|
f56c37f9ee | ||
|
|
5f5000218a | ||
|
|
e8eb309d82 | ||
|
|
d0c3203e63 | ||
|
|
f5b3901caa | ||
|
|
1a99fea820 | ||
|
|
195b60615b | ||
|
|
2c394965b8 | ||
|
|
746d697691 | ||
|
|
5689158b43 | ||
|
|
6fcdf3d011 | ||
|
|
e26573c18e | ||
|
|
801cf8d9f0 | ||
|
|
eced8f2e93 | ||
|
|
3b735d07ec | ||
|
|
5eb5476e3a | ||
|
|
6a42a0054e | ||
|
|
8c437e19b8 | ||
|
|
9cd3b6c879 | ||
|
|
fe135acbec | ||
|
|
997c5bdcfa | ||
|
|
23e12c4539 | ||
|
|
ca9798be14 | ||
|
|
6e01a58c85 | ||
|
|
f618617053 | ||
|
|
49b8b9c372 | ||
|
|
129f975d96 | ||
|
|
a2e463e58c | ||
|
|
5fd50f0e15 | ||
|
|
7f9a915d71 | ||
|
|
0a81736b7a | ||
|
|
f9b6dd0c6a | ||
|
|
0354401b56 | ||
|
|
0304067beb | ||
|
|
ddd83da434 | ||
|
|
fc7df671de | ||
|
|
5fde9030c7 | ||
|
|
d7b07b3f00 | ||
|
|
ddd1ffb29f | ||
|
|
98094000bb | ||
|
|
d5026ef996 | ||
|
|
2cd913b9dd | ||
|
|
ad9520abbc | ||
|
|
c0fc57d10c | ||
|
|
0cf4d303e4 | ||
|
|
6de397958a | ||
|
|
55292a84dc | ||
|
|
981b560d53 | ||
|
|
c4c4dd55cd | ||
|
|
1ddbe20c86 | ||
|
|
da9e8c1550 | ||
|
|
ef0937fec4 | ||
|
|
35885b40de | ||
|
|
d669569196 | ||
|
|
ae919ff3c8 | ||
|
|
1a7a4690d1 | ||
|
|
b9b96d1a35 | ||
|
|
da3a9590ac | ||
|
|
6b3d75bea1 | ||
|
|
d44721fef0 | ||
|
|
3f268e8376 | ||
|
|
303fea4ebe | ||
|
|
77173cdad0 | ||
|
|
1e24a7d739 | ||
|
|
a3b33bedb8 | ||
|
|
eaf7544c50 | ||
|
|
67863120e0 | ||
|
|
1b0e305d9a | ||
|
|
91fda01071 |
2
.cocoapods.yml
Normal file
2
.cocoapods.yml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
try:
|
||||||
|
project: 'CoreStore.xcworkspace'
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -7,3 +7,4 @@ CoreStore.xcworkspace/xcuserdata
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
DerivedData
|
DerivedData
|
||||||
*.orig
|
*.orig
|
||||||
|
build
|
||||||
|
|||||||
15
.jazzy.yaml
Normal file
15
.jazzy.yaml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
author: John Estropia
|
||||||
|
author_url: https://github.com/JohnEstropia
|
||||||
|
github_url: https://github.com/JohnEstropia/CoreStore
|
||||||
|
module: CoreStore
|
||||||
|
readme: README.md
|
||||||
|
include: Sources/*
|
||||||
|
output: docs
|
||||||
|
theme: fullwidth
|
||||||
|
clean: true
|
||||||
|
skip_undocumented: true
|
||||||
|
xcodebuild_arguments:
|
||||||
|
- -sdk
|
||||||
|
- iphonesimulator
|
||||||
|
- -scheme
|
||||||
|
- CoreStore iOS
|
||||||
@@ -1 +0,0 @@
|
|||||||
3.1
|
|
||||||
35
.travis.yml
35
.travis.yml
@@ -1,5 +1,5 @@
|
|||||||
language: objective-c
|
language: objective-c
|
||||||
osx_image: xcode8.3
|
osx_image: xcode10
|
||||||
sudo: false
|
sudo: false
|
||||||
git:
|
git:
|
||||||
submodules: false
|
submodules: false
|
||||||
@@ -9,25 +9,26 @@ env:
|
|||||||
global:
|
global:
|
||||||
- LC_CTYPE=en_US.UTF-8
|
- LC_CTYPE=en_US.UTF-8
|
||||||
- LANG=en_US.UTF-8
|
- LANG=en_US.UTF-8
|
||||||
matrix:
|
matrix:
|
||||||
- DESTINATION="OS=10.3,name=iPhone 7" SCHEME="CoreStore iOS" SDK=iphonesimulator10.3 RUN_TESTS="YES" POD_LINT="NO"
|
- DESTINATION="arch=x86_64" SCHEME="CoreStore OSX" SDK=macosx10.14 RUN_TESTS="YES" POD_LINT="NO"
|
||||||
- DESTINATION="OS=10.1,name=iPhone 7" SCHEME="CoreStore iOS" SDK=iphonesimulator10.3 RUN_TESTS="YES" POD_LINT="NO"
|
- DESTINATION="OS=12.0,name=iPhone XS" SCHEME="CoreStore iOS" SDK=iphonesimulator12.0 RUN_TESTS="YES" POD_LINT="NO"
|
||||||
- DESTINATION="OS=9.0,name=iPhone 6 Plus" SCHEME="CoreStore iOS" SDK=iphonesimulator10.3 RUN_TESTS="YES" POD_LINT="NO"
|
- DESTINATION="OS=11.0.1,name=iPhone 8" SCHEME="CoreStore iOS" SDK=iphonesimulator12.0 RUN_TESTS="YES" POD_LINT="NO"
|
||||||
- DESTINATION="OS=8.4,name=iPhone 6" SCHEME="CoreStore iOS" SDK=iphonesimulator10.3 RUN_TESTS="YES" POD_LINT="NO"
|
- DESTINATION="OS=10.3.1,name=iPhone 7" SCHEME="CoreStore iOS" SDK=iphonesimulator12.0 RUN_TESTS="YES" POD_LINT="NO"
|
||||||
- DESTINATION="OS=8.3,name=iPhone 5S" SCHEME="CoreStore iOS" SDK=iphonesimulator10.3 RUN_TESTS="YES" POD_LINT="NO"
|
- DESTINATION="OS=10.1,name=iPhone 7" SCHEME="CoreStore iOS" SDK=iphonesimulator12.0 RUN_TESTS="YES" POD_LINT="NO"
|
||||||
- DESTINATION="OS=8.3,name=iPhone 5" SCHEME="CoreStore iOS" SDK=iphonesimulator10.3 RUN_TESTS="YES" POD_LINT="NO"
|
- DESTINATION="OS=4.0,name=Apple Watch - 42mm" SCHEME="CoreStore watchOS" SDK=watchsimulator5.0 RUN_TESTS="NO" POD_LINT="NO"
|
||||||
- DESTINATION="OS=8.3,name=iPhone 4S" SCHEME="CoreStore iOS" SDK=iphonesimulator10.3 RUN_TESTS="YES" POD_LINT="NO"
|
- DESTINATION="OS=3.2,name=Apple Watch - 42mm" SCHEME="CoreStore watchOS" SDK=watchsimulator5.0 RUN_TESTS="NO" POD_LINT="NO"
|
||||||
- DESTINATION="arch=x86_64" SCHEME="CoreStore OSX" SDK=macosx10.12 RUN_TESTS="YES" POD_LINT="NO"
|
- DESTINATION="OS=2.2,name=Apple Watch - 42mm" SCHEME="CoreStore watchOS" SDK=watchsimulator5.0 RUN_TESTS="NO" POD_LINT="NO"
|
||||||
- DESTINATION="OS=3.2,name=Apple Watch - 42mm" SCHEME="CoreStore watchOS" SDK=watchsimulator3.2 RUN_TESTS="NO" POD_LINT="NO"
|
- DESTINATION="OS=12.0,name=Apple TV 4K" SCHEME="CoreStore tvOS" SDK=appletvsimulator12.0 RUN_TESTS="YES" POD_LINT="NO"
|
||||||
- DESTINATION="OS=2.2,name=Apple Watch - 42mm" SCHEME="CoreStore watchOS" SDK=watchsimulator3.2 RUN_TESTS="NO" POD_LINT="NO"
|
- DESTINATION="OS=11.0,name=Apple TV 4K (at 1080p)" SCHEME="CoreStore tvOS" SDK=appletvsimulator12.0 RUN_TESTS="YES" POD_LINT="NO"
|
||||||
- DESTINATION="OS=10.2,name=Apple TV 1080p" SCHEME="CoreStore tvOS" SDK=appletvsimulator10.2 RUN_TESTS="YES" POD_LINT="NO"
|
- DESTINATION="OS=10.2,name=Apple TV 1080p" SCHEME="CoreStore tvOS" SDK=appletvsimulator12.0 RUN_TESTS="YES" POD_LINT="NO"
|
||||||
- DESTINATION="OS=9.2,name=Apple TV 1080p" SCHEME="CoreStore tvOS" SDK=appletvsimulator10.2 RUN_TESTS="YES" POD_LINT="NO"
|
|
||||||
before_install:
|
before_install:
|
||||||
- gem install cocoapods --no-rdoc --no-ri --no-document --quiet
|
- gem install cocoapods --no-rdoc --no-ri --no-document --quiet
|
||||||
- gem install xcpretty --no-rdoc --no-ri --no-document --quiet
|
- gem install xcpretty --no-rdoc --no-ri --no-document --quiet
|
||||||
- curl -OlL "https://github.com/Carthage/Carthage/releases/download/0.20.1/Carthage.pkg"
|
- curl -OlL "https://github.com/Carthage/Carthage/releases/download/0.26.0/Carthage.pkg"
|
||||||
- sudo installer -pkg "Carthage.pkg" -target /
|
- sudo installer -pkg "Carthage.pkg" -target /
|
||||||
- rm "Carthage.pkg"
|
- rm "Carthage.pkg"
|
||||||
|
- npm install ios-sim -g
|
||||||
|
- ios-sim start --devicetypeid "com.apple.CoreSimulator.SimDeviceType.iPhone-8, 11.0"
|
||||||
before_script:
|
before_script:
|
||||||
- carthage update --use-submodules
|
- carthage update --use-submodules
|
||||||
script:
|
script:
|
||||||
@@ -38,8 +39,8 @@ script:
|
|||||||
xcodebuild -workspace CoreStore.xcworkspace -scheme "$SCHEME" -sdk "$SDK" -destination "$DESTINATION" -configuration Debug ONLY_ACTIVE_ARCH=NO clean test | xcpretty -c;
|
xcodebuild -workspace CoreStore.xcworkspace -scheme "$SCHEME" -sdk "$SDK" -destination "$DESTINATION" -configuration Debug ONLY_ACTIVE_ARCH=NO clean test | xcpretty -c;
|
||||||
xcodebuild -workspace CoreStore.xcworkspace -scheme "$SCHEME" -sdk "$SDK" -destination "$DESTINATION" -configuration Release ONLY_ACTIVE_ARCH=NO clean test | xcpretty -c;
|
xcodebuild -workspace CoreStore.xcworkspace -scheme "$SCHEME" -sdk "$SDK" -destination "$DESTINATION" -configuration Release ONLY_ACTIVE_ARCH=NO clean test | xcpretty -c;
|
||||||
fi
|
fi
|
||||||
- xcodebuild -workspace "CoreStore.xcworkspace" -scheme "CoreStore iOS" -sdk "iphonesimulator10.3" -destination "OS=10.3,name=iPhone 7" -configuration Debug ONLY_ACTIVE_ARCH=NO clean test | xcpretty -c;
|
- xcodebuild -workspace "CoreStore.xcworkspace" -scheme "CoreStoreDemo" -sdk "iphonesimulator12.0" -destination "OS=11.0.1,name=iPhone 8" -configuration Debug ONLY_ACTIVE_ARCH=NO build | xcpretty -c;
|
||||||
- xcodebuild -workspace "CoreStore.xcworkspace" -scheme "CoreStore iOS" -sdk "iphonesimulator10.3" -destination "OS=10.3,name=iPhone 7" -configuration Release ONLY_ACTIVE_ARCH=NO clean test | xcpretty -c;
|
- xcodebuild -workspace "CoreStore.xcworkspace" -scheme "CoreStoreDemo" -sdk "iphonesimulator12.0" -destination "OS=11.0.1,name=iPhone 8" -configuration Release ONLY_ACTIVE_ARCH=NO build | xcpretty -c;
|
||||||
- if [ $POD_LINT == "YES" ]; then
|
- if [ $POD_LINT == "YES" ]; then
|
||||||
pod lib lint --quick;
|
pod lib lint --quick;
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,16 +1,18 @@
|
|||||||
Pod::Spec.new do |s|
|
Pod::Spec.new do |s|
|
||||||
s.name = "CoreStore"
|
s.name = "CoreStore"
|
||||||
s.version = "4.0.0-beta"
|
s.version = "5.4.0"
|
||||||
|
s.swift_version = "4.2"
|
||||||
s.license = "MIT"
|
s.license = "MIT"
|
||||||
s.summary = "Unleashing the real power of Core Data with the elegance and safety of Swift"
|
|
||||||
s.homepage = "https://github.com/JohnEstropia/CoreStore"
|
s.homepage = "https://github.com/JohnEstropia/CoreStore"
|
||||||
|
s.documentation_url = "https://JohnEstropia.github.io/CoreStore"
|
||||||
|
s.summary = "Unleashing the real power of Core Data with the elegance and safety of Swift"
|
||||||
s.author = { "John Rommel Estropia" => "rommel.estropia@gmail.com" }
|
s.author = { "John Rommel Estropia" => "rommel.estropia@gmail.com" }
|
||||||
s.source = { :git => "https://github.com/JohnEstropia/CoreStore.git", :tag => s.version.to_s }
|
s.source = { :git => "https://github.com/JohnEstropia/CoreStore.git", :tag => s.version.to_s }
|
||||||
|
|
||||||
s.ios.deployment_target = "8.0"
|
s.ios.deployment_target = "10.0"
|
||||||
s.osx.deployment_target = "10.10"
|
s.osx.deployment_target = "10.12"
|
||||||
s.watchos.deployment_target = "2.0"
|
s.watchos.deployment_target = "3.0"
|
||||||
s.tvos.deployment_target = "9.0"
|
s.tvos.deployment_target = "10.0"
|
||||||
|
|
||||||
s.source_files = "Sources", "Sources/**/*.{swift,h,m}"
|
s.source_files = "Sources", "Sources/**/*.{swift,h,m}"
|
||||||
s.public_header_files = "Sources/**/*.h"
|
s.public_header_files = "Sources/**/*.h"
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
82BA18B51C4BBD3F00A0916E /* BaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EFE1AFF847B0064E85B /* BaseDataTransaction+Querying.swift */; };
|
82BA18B51C4BBD3F00A0916E /* BaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EFE1AFF847B0064E85B /* BaseDataTransaction+Querying.swift */; };
|
||||||
82BA18B61C4BBD3F00A0916E /* DataStack+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F061AFF847B0064E85B /* DataStack+Querying.swift */; };
|
82BA18B61C4BBD3F00A0916E /* DataStack+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F061AFF847B0064E85B /* DataStack+Querying.swift */; };
|
||||||
82BA18B71C4BBD3F00A0916E /* CoreStore+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F071AFF847B0064E85B /* CoreStore+Querying.swift */; };
|
82BA18B71C4BBD3F00A0916E /* CoreStore+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F071AFF847B0064E85B /* CoreStore+Querying.swift */; };
|
||||||
82BA18B81C4BBD4200A0916E /* ClauseTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F401AFF8CCD0064E85B /* ClauseTypes.swift */; };
|
82BA18B81C4BBD4200A0916E /* TypeErasedClauses.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F401AFF8CCD0064E85B /* TypeErasedClauses.swift */; };
|
||||||
82BA18B91C4BBD4A00A0916E /* From.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F011AFF847B0064E85B /* From.swift */; };
|
82BA18B91C4BBD4A00A0916E /* From.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F011AFF847B0064E85B /* From.swift */; };
|
||||||
82BA18BA1C4BBD4A00A0916E /* Select.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F031AFF847B0064E85B /* Select.swift */; };
|
82BA18BA1C4BBD4A00A0916E /* Select.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F031AFF847B0064E85B /* Select.swift */; };
|
||||||
82BA18BB1C4BBD4A00A0916E /* Where.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F051AFF847B0064E85B /* Where.swift */; };
|
82BA18BB1C4BBD4A00A0916E /* Where.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F051AFF847B0064E85B /* Where.swift */; };
|
||||||
@@ -101,6 +101,18 @@
|
|||||||
B51FE5AF1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = B51FE5AA1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift */; };
|
B51FE5AF1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = B51FE5AA1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift */; };
|
||||||
B5202CFA1C04688100DED140 /* NSFetchedResultsController+Convenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5202CF91C04688100DED140 /* NSFetchedResultsController+Convenience.swift */; };
|
B5202CFA1C04688100DED140 /* NSFetchedResultsController+Convenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5202CF91C04688100DED140 /* NSFetchedResultsController+Convenience.swift */; };
|
||||||
B5202CFD1C046E8400DED140 /* NSFetchedResultsController+Convenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5202CF91C04688100DED140 /* NSFetchedResultsController+Convenience.swift */; };
|
B5202CFD1C046E8400DED140 /* NSFetchedResultsController+Convenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5202CF91C04688100DED140 /* NSFetchedResultsController+Convenience.swift */; };
|
||||||
|
B5215CA41FA47DFD00139E3A /* FetchChainBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5215CA31FA47DFD00139E3A /* FetchChainBuilder.swift */; };
|
||||||
|
B5215CA51FA47DFD00139E3A /* FetchChainBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5215CA31FA47DFD00139E3A /* FetchChainBuilder.swift */; };
|
||||||
|
B5215CA61FA47DFD00139E3A /* FetchChainBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5215CA31FA47DFD00139E3A /* FetchChainBuilder.swift */; };
|
||||||
|
B5215CA71FA47DFD00139E3A /* FetchChainBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5215CA31FA47DFD00139E3A /* FetchChainBuilder.swift */; };
|
||||||
|
B5215CA91FA4810300139E3A /* QueryChainBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5215CA81FA4810300139E3A /* QueryChainBuilder.swift */; };
|
||||||
|
B5215CAA1FA4810300139E3A /* QueryChainBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5215CA81FA4810300139E3A /* QueryChainBuilder.swift */; };
|
||||||
|
B5215CAB1FA4810300139E3A /* QueryChainBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5215CA81FA4810300139E3A /* QueryChainBuilder.swift */; };
|
||||||
|
B5215CAC1FA4810300139E3A /* QueryChainBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5215CA81FA4810300139E3A /* QueryChainBuilder.swift */; };
|
||||||
|
B5215CAE1FA4812500139E3A /* SectionMonitorBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5215CAD1FA4812500139E3A /* SectionMonitorBuilder.swift */; };
|
||||||
|
B5215CAF1FA4812500139E3A /* SectionMonitorBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5215CAD1FA4812500139E3A /* SectionMonitorBuilder.swift */; };
|
||||||
|
B5215CB01FA4812500139E3A /* SectionMonitorBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5215CAD1FA4812500139E3A /* SectionMonitorBuilder.swift */; };
|
||||||
|
B5215CB11FA4812500139E3A /* SectionMonitorBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5215CAD1FA4812500139E3A /* SectionMonitorBuilder.swift */; };
|
||||||
B5220E081D0C5F8D009BC71E /* ObjectObserverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5220E071D0C5F8D009BC71E /* ObjectObserverTests.swift */; };
|
B5220E081D0C5F8D009BC71E /* ObjectObserverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5220E071D0C5F8D009BC71E /* ObjectObserverTests.swift */; };
|
||||||
B5220E091D0C5F8D009BC71E /* ObjectObserverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5220E071D0C5F8D009BC71E /* ObjectObserverTests.swift */; };
|
B5220E091D0C5F8D009BC71E /* ObjectObserverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5220E071D0C5F8D009BC71E /* ObjectObserverTests.swift */; };
|
||||||
B5220E0C1D0D0D19009BC71E /* ImportTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5220E0B1D0D0D19009BC71E /* ImportTests.swift */; };
|
B5220E0C1D0D0D19009BC71E /* ImportTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5220E0B1D0D0D19009BC71E /* ImportTests.swift */; };
|
||||||
@@ -184,7 +196,7 @@
|
|||||||
B52DD1A71BE1F93200949AFE /* BaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EFE1AFF847B0064E85B /* BaseDataTransaction+Querying.swift */; };
|
B52DD1A71BE1F93200949AFE /* BaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EFE1AFF847B0064E85B /* BaseDataTransaction+Querying.swift */; };
|
||||||
B52DD1A81BE1F93200949AFE /* DataStack+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F061AFF847B0064E85B /* DataStack+Querying.swift */; };
|
B52DD1A81BE1F93200949AFE /* DataStack+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F061AFF847B0064E85B /* DataStack+Querying.swift */; };
|
||||||
B52DD1A91BE1F93200949AFE /* CoreStore+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F071AFF847B0064E85B /* CoreStore+Querying.swift */; };
|
B52DD1A91BE1F93200949AFE /* CoreStore+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F071AFF847B0064E85B /* CoreStore+Querying.swift */; };
|
||||||
B52DD1AA1BE1F93500949AFE /* ClauseTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F401AFF8CCD0064E85B /* ClauseTypes.swift */; };
|
B52DD1AA1BE1F93500949AFE /* TypeErasedClauses.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F401AFF8CCD0064E85B /* TypeErasedClauses.swift */; };
|
||||||
B52DD1AB1BE1F93900949AFE /* From.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F011AFF847B0064E85B /* From.swift */; };
|
B52DD1AB1BE1F93900949AFE /* From.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F011AFF847B0064E85B /* From.swift */; };
|
||||||
B52DD1AC1BE1F93900949AFE /* Select.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F031AFF847B0064E85B /* Select.swift */; };
|
B52DD1AC1BE1F93900949AFE /* Select.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F031AFF847B0064E85B /* Select.swift */; };
|
||||||
B52DD1AD1BE1F93900949AFE /* Where.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F051AFF847B0064E85B /* Where.swift */; };
|
B52DD1AD1BE1F93900949AFE /* Where.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F051AFF847B0064E85B /* Where.swift */; };
|
||||||
@@ -214,10 +226,10 @@
|
|||||||
B52F743E1E9B8724005F3DAC /* DynamicSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743A1E9B8724005F3DAC /* DynamicSchema.swift */; };
|
B52F743E1E9B8724005F3DAC /* DynamicSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743A1E9B8724005F3DAC /* DynamicSchema.swift */; };
|
||||||
B52F743F1E9B8724005F3DAC /* DynamicSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743A1E9B8724005F3DAC /* DynamicSchema.swift */; };
|
B52F743F1E9B8724005F3DAC /* DynamicSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743A1E9B8724005F3DAC /* DynamicSchema.swift */; };
|
||||||
B52F74401E9B8724005F3DAC /* DynamicSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743A1E9B8724005F3DAC /* DynamicSchema.swift */; };
|
B52F74401E9B8724005F3DAC /* DynamicSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743A1E9B8724005F3DAC /* DynamicSchema.swift */; };
|
||||||
B52F74411E9B8724005F3DAC /* LegacyXcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743B1E9B8724005F3DAC /* LegacyXcodeDataModelSchema.swift */; };
|
B52F74411E9B8724005F3DAC /* UnsafeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743B1E9B8724005F3DAC /* UnsafeDataModelSchema.swift */; };
|
||||||
B52F74421E9B8724005F3DAC /* LegacyXcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743B1E9B8724005F3DAC /* LegacyXcodeDataModelSchema.swift */; };
|
B52F74421E9B8724005F3DAC /* UnsafeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743B1E9B8724005F3DAC /* UnsafeDataModelSchema.swift */; };
|
||||||
B52F74431E9B8724005F3DAC /* LegacyXcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743B1E9B8724005F3DAC /* LegacyXcodeDataModelSchema.swift */; };
|
B52F74431E9B8724005F3DAC /* UnsafeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743B1E9B8724005F3DAC /* UnsafeDataModelSchema.swift */; };
|
||||||
B52F74441E9B8724005F3DAC /* LegacyXcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743B1E9B8724005F3DAC /* LegacyXcodeDataModelSchema.swift */; };
|
B52F74441E9B8724005F3DAC /* UnsafeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743B1E9B8724005F3DAC /* UnsafeDataModelSchema.swift */; };
|
||||||
B52F74451E9B8724005F3DAC /* XcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743C1E9B8724005F3DAC /* XcodeDataModelSchema.swift */; };
|
B52F74451E9B8724005F3DAC /* XcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743C1E9B8724005F3DAC /* XcodeDataModelSchema.swift */; };
|
||||||
B52F74461E9B8724005F3DAC /* XcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743C1E9B8724005F3DAC /* XcodeDataModelSchema.swift */; };
|
B52F74461E9B8724005F3DAC /* XcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743C1E9B8724005F3DAC /* XcodeDataModelSchema.swift */; };
|
||||||
B52F74471E9B8724005F3DAC /* XcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743C1E9B8724005F3DAC /* XcodeDataModelSchema.swift */; };
|
B52F74471E9B8724005F3DAC /* XcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52F743C1E9B8724005F3DAC /* XcodeDataModelSchema.swift */; };
|
||||||
@@ -238,6 +250,14 @@
|
|||||||
B538BA781D15B3E30003A766 /* CoreStoreBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = B538BA701D15B3E30003A766 /* CoreStoreBridge.m */; };
|
B538BA781D15B3E30003A766 /* CoreStoreBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = B538BA701D15B3E30003A766 /* CoreStoreBridge.m */; };
|
||||||
B538BA791D15B3E30003A766 /* CoreStoreBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = B538BA701D15B3E30003A766 /* CoreStoreBridge.m */; };
|
B538BA791D15B3E30003A766 /* CoreStoreBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = B538BA701D15B3E30003A766 /* CoreStoreBridge.m */; };
|
||||||
B538BA7A1D15B3E30003A766 /* CoreStoreBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = B538BA701D15B3E30003A766 /* CoreStoreBridge.m */; };
|
B538BA7A1D15B3E30003A766 /* CoreStoreBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = B538BA701D15B3E30003A766 /* CoreStoreBridge.m */; };
|
||||||
|
B53B275F1EE3B92E00E9B352 /* CoreStoreManagedObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53B275E1EE3B92E00E9B352 /* CoreStoreManagedObject.swift */; };
|
||||||
|
B53B27601EE3B92E00E9B352 /* CoreStoreManagedObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53B275E1EE3B92E00E9B352 /* CoreStoreManagedObject.swift */; };
|
||||||
|
B53B27611EE3B92E00E9B352 /* CoreStoreManagedObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53B275E1EE3B92E00E9B352 /* CoreStoreManagedObject.swift */; };
|
||||||
|
B53B27621EE3B92E00E9B352 /* CoreStoreManagedObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53B275E1EE3B92E00E9B352 /* CoreStoreManagedObject.swift */; };
|
||||||
|
B53CA9A21EF1EF1600E0F440 /* PartialObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53CA9A11EF1EF1600E0F440 /* PartialObject.swift */; };
|
||||||
|
B53CA9A31EF1EF1600E0F440 /* PartialObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53CA9A11EF1EF1600E0F440 /* PartialObject.swift */; };
|
||||||
|
B53CA9A41EF1EF1600E0F440 /* PartialObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53CA9A11EF1EF1600E0F440 /* PartialObject.swift */; };
|
||||||
|
B53CA9A51EF1EF1600E0F440 /* PartialObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53CA9A11EF1EF1600E0F440 /* PartialObject.swift */; };
|
||||||
B53FB9FE1CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FB9FD1CAB2D2F00F0D40A /* CSMigrationResult.swift */; };
|
B53FB9FE1CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FB9FD1CAB2D2F00F0D40A /* CSMigrationResult.swift */; };
|
||||||
B53FBA001CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FB9FD1CAB2D2F00F0D40A /* CSMigrationResult.swift */; };
|
B53FBA001CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FB9FD1CAB2D2F00F0D40A /* CSMigrationResult.swift */; };
|
||||||
B53FBA011CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FB9FD1CAB2D2F00F0D40A /* CSMigrationResult.swift */; };
|
B53FBA011CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53FB9FD1CAB2D2F00F0D40A /* CSMigrationResult.swift */; };
|
||||||
@@ -316,6 +336,10 @@
|
|||||||
B5519A601CA21954002BEF78 /* CSAsynchronousDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5519A5E1CA21954002BEF78 /* CSAsynchronousDataTransaction.swift */; };
|
B5519A601CA21954002BEF78 /* CSAsynchronousDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5519A5E1CA21954002BEF78 /* CSAsynchronousDataTransaction.swift */; };
|
||||||
B5519A611CA21954002BEF78 /* CSAsynchronousDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5519A5E1CA21954002BEF78 /* CSAsynchronousDataTransaction.swift */; };
|
B5519A611CA21954002BEF78 /* CSAsynchronousDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5519A5E1CA21954002BEF78 /* CSAsynchronousDataTransaction.swift */; };
|
||||||
B5519A621CA21954002BEF78 /* CSAsynchronousDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5519A5E1CA21954002BEF78 /* CSAsynchronousDataTransaction.swift */; };
|
B5519A621CA21954002BEF78 /* CSAsynchronousDataTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5519A5E1CA21954002BEF78 /* CSAsynchronousDataTransaction.swift */; };
|
||||||
|
B55514EA1EED8BF900BAB888 /* From+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55514E91EED8BF900BAB888 /* From+Querying.swift */; };
|
||||||
|
B55514EB1EED8BF900BAB888 /* From+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55514E91EED8BF900BAB888 /* From+Querying.swift */; };
|
||||||
|
B55514EC1EED8BF900BAB888 /* From+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55514E91EED8BF900BAB888 /* From+Querying.swift */; };
|
||||||
|
B55514ED1EED8BF900BAB888 /* From+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55514E91EED8BF900BAB888 /* From+Querying.swift */; };
|
||||||
B55717441D15B09E009BDBCA /* CoreStoreBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = B55717421D15AF9C009BDBCA /* CoreStoreBridge.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
B55717441D15B09E009BDBCA /* CoreStoreBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = B55717421D15AF9C009BDBCA /* CoreStoreBridge.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
B55717451D15B09F009BDBCA /* CoreStoreBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = B55717421D15AF9C009BDBCA /* CoreStoreBridge.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
B55717451D15B09F009BDBCA /* CoreStoreBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = B55717421D15AF9C009BDBCA /* CoreStoreBridge.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
B55717461D15B0A1009BDBCA /* CoreStoreBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = B55717421D15AF9C009BDBCA /* CoreStoreBridge.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
B55717461D15B0A1009BDBCA /* CoreStoreBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = B55717421D15AF9C009BDBCA /* CoreStoreBridge.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
@@ -354,7 +378,7 @@
|
|||||||
B56321921BD65216006C9394 /* BaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EFE1AFF847B0064E85B /* BaseDataTransaction+Querying.swift */; };
|
B56321921BD65216006C9394 /* BaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EFE1AFF847B0064E85B /* BaseDataTransaction+Querying.swift */; };
|
||||||
B56321931BD65216006C9394 /* DataStack+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F061AFF847B0064E85B /* DataStack+Querying.swift */; };
|
B56321931BD65216006C9394 /* DataStack+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F061AFF847B0064E85B /* DataStack+Querying.swift */; };
|
||||||
B56321941BD65216006C9394 /* CoreStore+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F071AFF847B0064E85B /* CoreStore+Querying.swift */; };
|
B56321941BD65216006C9394 /* CoreStore+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F071AFF847B0064E85B /* CoreStore+Querying.swift */; };
|
||||||
B56321951BD65216006C9394 /* ClauseTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F401AFF8CCD0064E85B /* ClauseTypes.swift */; };
|
B56321951BD65216006C9394 /* TypeErasedClauses.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F401AFF8CCD0064E85B /* TypeErasedClauses.swift */; };
|
||||||
B56321961BD65216006C9394 /* From.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F011AFF847B0064E85B /* From.swift */; };
|
B56321961BD65216006C9394 /* From.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F011AFF847B0064E85B /* From.swift */; };
|
||||||
B56321971BD65216006C9394 /* Select.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F031AFF847B0064E85B /* Select.swift */; };
|
B56321971BD65216006C9394 /* Select.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F031AFF847B0064E85B /* Select.swift */; };
|
||||||
B56321981BD65216006C9394 /* Where.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F051AFF847B0064E85B /* Where.swift */; };
|
B56321981BD65216006C9394 /* Where.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F051AFF847B0064E85B /* Where.swift */; };
|
||||||
@@ -426,10 +450,10 @@
|
|||||||
B56923FB1EB82956007C4DC9 /* CSXcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56923F91EB82956007C4DC9 /* CSXcodeDataModelSchema.swift */; };
|
B56923FB1EB82956007C4DC9 /* CSXcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56923F91EB82956007C4DC9 /* CSXcodeDataModelSchema.swift */; };
|
||||||
B56923FC1EB82956007C4DC9 /* CSXcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56923F91EB82956007C4DC9 /* CSXcodeDataModelSchema.swift */; };
|
B56923FC1EB82956007C4DC9 /* CSXcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56923F91EB82956007C4DC9 /* CSXcodeDataModelSchema.swift */; };
|
||||||
B56923FD1EB82956007C4DC9 /* CSXcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56923F91EB82956007C4DC9 /* CSXcodeDataModelSchema.swift */; };
|
B56923FD1EB82956007C4DC9 /* CSXcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56923F91EB82956007C4DC9 /* CSXcodeDataModelSchema.swift */; };
|
||||||
B56923FF1EB82976007C4DC9 /* CSLegacyXcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56923FE1EB82976007C4DC9 /* CSLegacyXcodeDataModelSchema.swift */; };
|
B56923FF1EB82976007C4DC9 /* CSUnsafeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56923FE1EB82976007C4DC9 /* CSUnsafeDataModelSchema.swift */; };
|
||||||
B56924001EB82976007C4DC9 /* CSLegacyXcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56923FE1EB82976007C4DC9 /* CSLegacyXcodeDataModelSchema.swift */; };
|
B56924001EB82976007C4DC9 /* CSUnsafeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56923FE1EB82976007C4DC9 /* CSUnsafeDataModelSchema.swift */; };
|
||||||
B56924011EB82976007C4DC9 /* CSLegacyXcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56923FE1EB82976007C4DC9 /* CSLegacyXcodeDataModelSchema.swift */; };
|
B56924011EB82976007C4DC9 /* CSUnsafeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56923FE1EB82976007C4DC9 /* CSUnsafeDataModelSchema.swift */; };
|
||||||
B56924021EB82976007C4DC9 /* CSLegacyXcodeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56923FE1EB82976007C4DC9 /* CSLegacyXcodeDataModelSchema.swift */; };
|
B56924021EB82976007C4DC9 /* CSUnsafeDataModelSchema.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56923FE1EB82976007C4DC9 /* CSUnsafeDataModelSchema.swift */; };
|
||||||
B56964D41B22FFAD0075EE4A /* DataStack+Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56964D31B22FFAD0075EE4A /* DataStack+Migration.swift */; };
|
B56964D41B22FFAD0075EE4A /* DataStack+Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56964D31B22FFAD0075EE4A /* DataStack+Migration.swift */; };
|
||||||
B56965241B356B820075EE4A /* MigrationResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56965231B356B820075EE4A /* MigrationResult.swift */; };
|
B56965241B356B820075EE4A /* MigrationResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56965231B356B820075EE4A /* MigrationResult.swift */; };
|
||||||
B57D27BE1D0BBE8200539C58 /* BaseTestDataTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B57D27BD1D0BBE8200539C58 /* BaseTestDataTestCase.swift */; };
|
B57D27BE1D0BBE8200539C58 /* BaseTestDataTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B57D27BD1D0BBE8200539C58 /* BaseTestDataTestCase.swift */; };
|
||||||
@@ -441,6 +465,18 @@
|
|||||||
B580857A1CDF808C004C2EEB /* SetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B58085741CDF7F00004C2EEB /* SetupTests.swift */; };
|
B580857A1CDF808C004C2EEB /* SetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B58085741CDF7F00004C2EEB /* SetupTests.swift */; };
|
||||||
B580857B1CDF808D004C2EEB /* SetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B58085741CDF7F00004C2EEB /* SetupTests.swift */; };
|
B580857B1CDF808D004C2EEB /* SetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B58085741CDF7F00004C2EEB /* SetupTests.swift */; };
|
||||||
B580857C1CDF808F004C2EEB /* SetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B58085741CDF7F00004C2EEB /* SetupTests.swift */; };
|
B580857C1CDF808F004C2EEB /* SetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B58085741CDF7F00004C2EEB /* SetupTests.swift */; };
|
||||||
|
B5831B701F34AC3400A9F647 /* AttributeProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B6F1F34AC3400A9F647 /* AttributeProtocol.swift */; };
|
||||||
|
B5831B711F34AC3400A9F647 /* AttributeProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B6F1F34AC3400A9F647 /* AttributeProtocol.swift */; };
|
||||||
|
B5831B721F34AC3400A9F647 /* AttributeProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B6F1F34AC3400A9F647 /* AttributeProtocol.swift */; };
|
||||||
|
B5831B731F34AC3400A9F647 /* AttributeProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B6F1F34AC3400A9F647 /* AttributeProtocol.swift */; };
|
||||||
|
B5831B751F34AC7A00A9F647 /* RelationshipProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B741F34AC7A00A9F647 /* RelationshipProtocol.swift */; };
|
||||||
|
B5831B761F34AC7A00A9F647 /* RelationshipProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B741F34AC7A00A9F647 /* RelationshipProtocol.swift */; };
|
||||||
|
B5831B771F34AC7A00A9F647 /* RelationshipProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B741F34AC7A00A9F647 /* RelationshipProtocol.swift */; };
|
||||||
|
B5831B781F34AC7A00A9F647 /* RelationshipProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B741F34AC7A00A9F647 /* RelationshipProtocol.swift */; };
|
||||||
|
B5831B7A1F34ACBA00A9F647 /* Transformable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B791F34ACBA00A9F647 /* Transformable.swift */; };
|
||||||
|
B5831B7B1F34ACBA00A9F647 /* Transformable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B791F34ACBA00A9F647 /* Transformable.swift */; };
|
||||||
|
B5831B7C1F34ACBA00A9F647 /* Transformable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B791F34ACBA00A9F647 /* Transformable.swift */; };
|
||||||
|
B5831B7D1F34ACBA00A9F647 /* Transformable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5831B791F34ACBA00A9F647 /* Transformable.swift */; };
|
||||||
B58B22F51C93C1BA00521925 /* CoreStore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F03A53019C5C6DA005002A5 /* CoreStore.framework */; };
|
B58B22F51C93C1BA00521925 /* CoreStore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F03A53019C5C6DA005002A5 /* CoreStore.framework */; };
|
||||||
B58D0C631EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B58D0C621EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift */; };
|
B58D0C631EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B58D0C621EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift */; };
|
||||||
B58D0C641EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B58D0C621EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift */; };
|
B58D0C641EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B58D0C621EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift */; };
|
||||||
@@ -465,6 +501,10 @@
|
|||||||
B59FA0B01CCBACA7007C9BCA /* ICloudStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59FA0AD1CCBAC95007C9BCA /* ICloudStore.swift */; };
|
B59FA0B01CCBACA7007C9BCA /* ICloudStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59FA0AD1CCBAC95007C9BCA /* ICloudStore.swift */; };
|
||||||
B59FA0B11CCBACA7007C9BCA /* ICloudStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59FA0AD1CCBAC95007C9BCA /* ICloudStore.swift */; };
|
B59FA0B11CCBACA7007C9BCA /* ICloudStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59FA0AD1CCBAC95007C9BCA /* ICloudStore.swift */; };
|
||||||
B59FA0B21CCBACA8007C9BCA /* ICloudStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59FA0AD1CCBAC95007C9BCA /* ICloudStore.swift */; };
|
B59FA0B21CCBACA8007C9BCA /* ICloudStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59FA0AD1CCBAC95007C9BCA /* ICloudStore.swift */; };
|
||||||
|
B5A1DAC81F111BFA003CF369 /* KeyPath+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A1DAC71F111BFA003CF369 /* KeyPath+Querying.swift */; };
|
||||||
|
B5A1DAC91F111BFA003CF369 /* KeyPath+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A1DAC71F111BFA003CF369 /* KeyPath+Querying.swift */; };
|
||||||
|
B5A1DACA1F111BFA003CF369 /* KeyPath+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A1DAC71F111BFA003CF369 /* KeyPath+Querying.swift */; };
|
||||||
|
B5A1DACB1F111BFA003CF369 /* KeyPath+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A1DAC71F111BFA003CF369 /* KeyPath+Querying.swift */; };
|
||||||
B5A261211B64BFDB006EB6D3 /* MigrationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A261201B64BFDB006EB6D3 /* MigrationType.swift */; };
|
B5A261211B64BFDB006EB6D3 /* MigrationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A261201B64BFDB006EB6D3 /* MigrationType.swift */; };
|
||||||
B5A5F2661CAEC50F004AB9AF /* CSSelect.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A5F2651CAEC50F004AB9AF /* CSSelect.swift */; };
|
B5A5F2661CAEC50F004AB9AF /* CSSelect.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A5F2651CAEC50F004AB9AF /* CSSelect.swift */; };
|
||||||
B5A5F2681CAEC50F004AB9AF /* CSSelect.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A5F2651CAEC50F004AB9AF /* CSSelect.swift */; };
|
B5A5F2681CAEC50F004AB9AF /* CSSelect.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A5F2651CAEC50F004AB9AF /* CSSelect.swift */; };
|
||||||
@@ -488,6 +528,14 @@
|
|||||||
B5C976E71C6E3A5A00B1AF90 /* CoreStoreFetchedResultsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C976E61C6E3A5900B1AF90 /* CoreStoreFetchedResultsController.swift */; };
|
B5C976E71C6E3A5A00B1AF90 /* CoreStoreFetchedResultsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C976E61C6E3A5900B1AF90 /* CoreStoreFetchedResultsController.swift */; };
|
||||||
B5C976E81C6E3A5D00B1AF90 /* CoreStoreFetchedResultsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C976E61C6E3A5900B1AF90 /* CoreStoreFetchedResultsController.swift */; };
|
B5C976E81C6E3A5D00B1AF90 /* CoreStoreFetchedResultsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C976E61C6E3A5900B1AF90 /* CoreStoreFetchedResultsController.swift */; };
|
||||||
B5C976E91C6E3A5E00B1AF90 /* CoreStoreFetchedResultsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C976E61C6E3A5900B1AF90 /* CoreStoreFetchedResultsController.swift */; };
|
B5C976E91C6E3A5E00B1AF90 /* CoreStoreFetchedResultsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C976E61C6E3A5900B1AF90 /* CoreStoreFetchedResultsController.swift */; };
|
||||||
|
B5CA2B081F7E5ACA004B1936 /* WhereClauseType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5CA2B071F7E5ACA004B1936 /* WhereClauseType.swift */; };
|
||||||
|
B5CA2B091F7E5ACA004B1936 /* WhereClauseType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5CA2B071F7E5ACA004B1936 /* WhereClauseType.swift */; };
|
||||||
|
B5CA2B0A1F7E5ACA004B1936 /* WhereClauseType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5CA2B071F7E5ACA004B1936 /* WhereClauseType.swift */; };
|
||||||
|
B5CA2B0B1F7E5ACA004B1936 /* WhereClauseType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5CA2B071F7E5ACA004B1936 /* WhereClauseType.swift */; };
|
||||||
|
B5CA2B121F81DBFE004B1936 /* DynamicKeyPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5CA2B111F81DBFE004B1936 /* DynamicKeyPath.swift */; };
|
||||||
|
B5CA2B131F81DBFE004B1936 /* DynamicKeyPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5CA2B111F81DBFE004B1936 /* DynamicKeyPath.swift */; };
|
||||||
|
B5CA2B141F81DBFE004B1936 /* DynamicKeyPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5CA2B111F81DBFE004B1936 /* DynamicKeyPath.swift */; };
|
||||||
|
B5CA2B151F81DBFF004B1936 /* DynamicKeyPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5CA2B111F81DBFE004B1936 /* DynamicKeyPath.swift */; };
|
||||||
B5D1E22C19FA9FBC003B2874 /* CoreStoreError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D1E22B19FA9FBC003B2874 /* CoreStoreError.swift */; };
|
B5D1E22C19FA9FBC003B2874 /* CoreStoreError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D1E22B19FA9FBC003B2874 /* CoreStoreError.swift */; };
|
||||||
B5D339B41E925C2B00C880DE /* DynamicModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D339B31E925C2B00C880DE /* DynamicModelTests.swift */; };
|
B5D339B41E925C2B00C880DE /* DynamicModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D339B31E925C2B00C880DE /* DynamicModelTests.swift */; };
|
||||||
B5D339B51E925C2B00C880DE /* DynamicModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D339B31E925C2B00C880DE /* DynamicModelTests.swift */; };
|
B5D339B51E925C2B00C880DE /* DynamicModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D339B31E925C2B00C880DE /* DynamicModelTests.swift */; };
|
||||||
@@ -610,7 +658,11 @@
|
|||||||
B5E84F361AFF85470064E85B /* NSManagedObjectContext+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F321AFF85470064E85B /* NSManagedObjectContext+Setup.swift */; };
|
B5E84F361AFF85470064E85B /* NSManagedObjectContext+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F321AFF85470064E85B /* NSManagedObjectContext+Setup.swift */; };
|
||||||
B5E84F371AFF85470064E85B /* NSManagedObjectContext+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F331AFF85470064E85B /* NSManagedObjectContext+Transaction.swift */; };
|
B5E84F371AFF85470064E85B /* NSManagedObjectContext+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F331AFF85470064E85B /* NSManagedObjectContext+Transaction.swift */; };
|
||||||
B5E84F391AFF85470064E85B /* NSManagedObjectContext+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F351AFF85470064E85B /* NSManagedObjectContext+Querying.swift */; };
|
B5E84F391AFF85470064E85B /* NSManagedObjectContext+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F351AFF85470064E85B /* NSManagedObjectContext+Querying.swift */; };
|
||||||
B5E84F411AFF8CCD0064E85B /* ClauseTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F401AFF8CCD0064E85B /* ClauseTypes.swift */; };
|
B5E84F411AFF8CCD0064E85B /* TypeErasedClauses.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84F401AFF8CCD0064E85B /* TypeErasedClauses.swift */; };
|
||||||
|
B5E8A72021C1015300EF006A /* CoreStoreObject+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E8A71F21C1015300EF006A /* CoreStoreObject+Observing.swift */; };
|
||||||
|
B5E8A72121C1015300EF006A /* CoreStoreObject+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E8A71F21C1015300EF006A /* CoreStoreObject+Observing.swift */; };
|
||||||
|
B5E8A72221C1015300EF006A /* CoreStoreObject+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E8A71F21C1015300EF006A /* CoreStoreObject+Observing.swift */; };
|
||||||
|
B5E8A72321C1015300EF006A /* CoreStoreObject+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E8A71F21C1015300EF006A /* CoreStoreObject+Observing.swift */; };
|
||||||
B5ECDBDF1CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBDE1CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift */; };
|
B5ECDBDF1CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBDE1CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift */; };
|
||||||
B5ECDBE11CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBDE1CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift */; };
|
B5ECDBE11CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBDE1CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift */; };
|
||||||
B5ECDBE21CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBDE1CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift */; };
|
B5ECDBE21CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ECDBDE1CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift */; };
|
||||||
@@ -729,9 +781,13 @@
|
|||||||
B51260921E9B28F100402229 /* EntityIdentifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EntityIdentifier.swift; sourceTree = "<group>"; };
|
B51260921E9B28F100402229 /* EntityIdentifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EntityIdentifier.swift; sourceTree = "<group>"; };
|
||||||
B51FE5AA1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CoreStore+CustomDebugStringConvertible.swift"; sourceTree = "<group>"; };
|
B51FE5AA1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CoreStore+CustomDebugStringConvertible.swift"; sourceTree = "<group>"; };
|
||||||
B5202CF91C04688100DED140 /* NSFetchedResultsController+Convenience.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSFetchedResultsController+Convenience.swift"; sourceTree = "<group>"; };
|
B5202CF91C04688100DED140 /* NSFetchedResultsController+Convenience.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSFetchedResultsController+Convenience.swift"; sourceTree = "<group>"; };
|
||||||
|
B5215CA31FA47DFD00139E3A /* FetchChainBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchChainBuilder.swift; sourceTree = "<group>"; };
|
||||||
|
B5215CA81FA4810300139E3A /* QueryChainBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueryChainBuilder.swift; sourceTree = "<group>"; };
|
||||||
|
B5215CAD1FA4812500139E3A /* SectionMonitorBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SectionMonitorBuilder.swift; sourceTree = "<group>"; };
|
||||||
B5220E071D0C5F8D009BC71E /* ObjectObserverTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjectObserverTests.swift; sourceTree = "<group>"; };
|
B5220E071D0C5F8D009BC71E /* ObjectObserverTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjectObserverTests.swift; sourceTree = "<group>"; };
|
||||||
B5220E0B1D0D0D19009BC71E /* ImportTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImportTests.swift; sourceTree = "<group>"; };
|
B5220E0B1D0D0D19009BC71E /* ImportTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImportTests.swift; sourceTree = "<group>"; };
|
||||||
B5220E0F1D0DA6AB009BC71E /* ListObserverTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListObserverTests.swift; sourceTree = "<group>"; };
|
B5220E0F1D0DA6AB009BC71E /* ListObserverTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListObserverTests.swift; sourceTree = "<group>"; };
|
||||||
|
B524E78721CA20AC00BEB794 /* .jazzy.yaml */ = {isa = PBXFileReference; lastKnownFileType = text; path = .jazzy.yaml; sourceTree = SOURCE_ROOT; };
|
||||||
B525576B1CFAF18F00E51965 /* IntoTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IntoTests.swift; sourceTree = "<group>"; };
|
B525576B1CFAF18F00E51965 /* IntoTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IntoTests.swift; sourceTree = "<group>"; };
|
||||||
B525576F1D02561A00E51965 /* SelectTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectTests.swift; sourceTree = "<group>"; };
|
B525576F1D02561A00E51965 /* SelectTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectTests.swift; sourceTree = "<group>"; };
|
||||||
B52557731D02791400E51965 /* WhereTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WhereTests.swift; sourceTree = "<group>"; };
|
B52557731D02791400E51965 /* WhereTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WhereTests.swift; sourceTree = "<group>"; };
|
||||||
@@ -746,12 +802,14 @@
|
|||||||
B52DD17D1BE1F8CC00949AFE /* CoreStoreTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CoreStoreTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
B52DD17D1BE1F8CC00949AFE /* CoreStoreTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CoreStoreTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
B52F742E1E9B50D0005F3DAC /* SchemaHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SchemaHistory.swift; sourceTree = "<group>"; };
|
B52F742E1E9B50D0005F3DAC /* SchemaHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SchemaHistory.swift; sourceTree = "<group>"; };
|
||||||
B52F743A1E9B8724005F3DAC /* DynamicSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DynamicSchema.swift; sourceTree = "<group>"; };
|
B52F743A1E9B8724005F3DAC /* DynamicSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DynamicSchema.swift; sourceTree = "<group>"; };
|
||||||
B52F743B1E9B8724005F3DAC /* LegacyXcodeDataModelSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyXcodeDataModelSchema.swift; sourceTree = "<group>"; };
|
B52F743B1E9B8724005F3DAC /* UnsafeDataModelSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnsafeDataModelSchema.swift; sourceTree = "<group>"; };
|
||||||
B52F743C1E9B8724005F3DAC /* XcodeDataModelSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XcodeDataModelSchema.swift; sourceTree = "<group>"; };
|
B52F743C1E9B8724005F3DAC /* XcodeDataModelSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XcodeDataModelSchema.swift; sourceTree = "<group>"; };
|
||||||
B52F74491E9B8740005F3DAC /* CoreStoreSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreStoreSchema.swift; sourceTree = "<group>"; };
|
B52F74491E9B8740005F3DAC /* CoreStoreSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreStoreSchema.swift; sourceTree = "<group>"; };
|
||||||
B52FD3A91E3B3EF10001D919 /* NSManagedObject+Logging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+Logging.swift"; sourceTree = "<group>"; };
|
B52FD3A91E3B3EF10001D919 /* NSManagedObject+Logging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+Logging.swift"; sourceTree = "<group>"; };
|
||||||
B533C4DA1D7D4BFA001383CB /* DispatchQueue+CoreStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DispatchQueue+CoreStore.swift"; sourceTree = "<group>"; };
|
B533C4DA1D7D4BFA001383CB /* DispatchQueue+CoreStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DispatchQueue+CoreStore.swift"; sourceTree = "<group>"; };
|
||||||
B538BA701D15B3E30003A766 /* CoreStoreBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CoreStoreBridge.m; sourceTree = "<group>"; };
|
B538BA701D15B3E30003A766 /* CoreStoreBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CoreStoreBridge.m; sourceTree = "<group>"; };
|
||||||
|
B53B275E1EE3B92E00E9B352 /* CoreStoreManagedObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreStoreManagedObject.swift; sourceTree = "<group>"; };
|
||||||
|
B53CA9A11EF1EF1600E0F440 /* PartialObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PartialObject.swift; sourceTree = "<group>"; };
|
||||||
B53FB9FD1CAB2D2F00F0D40A /* CSMigrationResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSMigrationResult.swift; sourceTree = "<group>"; };
|
B53FB9FD1CAB2D2F00F0D40A /* CSMigrationResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSMigrationResult.swift; sourceTree = "<group>"; };
|
||||||
B53FBA031CAB300C00F0D40A /* CSMigrationType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSMigrationType.swift; sourceTree = "<group>"; };
|
B53FBA031CAB300C00F0D40A /* CSMigrationType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSMigrationType.swift; sourceTree = "<group>"; };
|
||||||
B53FBA0A1CAB5E6500F0D40A /* CSCoreStore+Migrating.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CSCoreStore+Migrating.swift"; sourceTree = "<group>"; };
|
B53FBA0A1CAB5E6500F0D40A /* CSCoreStore+Migrating.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CSCoreStore+Migrating.swift"; sourceTree = "<group>"; };
|
||||||
@@ -776,6 +834,7 @@
|
|||||||
B5519A5E1CA21954002BEF78 /* CSAsynchronousDataTransaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSAsynchronousDataTransaction.swift; sourceTree = "<group>"; };
|
B5519A5E1CA21954002BEF78 /* CSAsynchronousDataTransaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSAsynchronousDataTransaction.swift; sourceTree = "<group>"; };
|
||||||
B5548CD51BD65AE00077652A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
|
B5548CD51BD65AE00077652A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
|
||||||
B5548CD71BD65AE50077652A /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/CoreData.framework; sourceTree = DEVELOPER_DIR; };
|
B5548CD71BD65AE50077652A /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/CoreData.framework; sourceTree = DEVELOPER_DIR; };
|
||||||
|
B55514E91EED8BF900BAB888 /* From+Querying.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "From+Querying.swift"; sourceTree = "<group>"; };
|
||||||
B55717421D15AF9C009BDBCA /* CoreStoreBridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CoreStoreBridge.h; sourceTree = "<group>"; };
|
B55717421D15AF9C009BDBCA /* CoreStoreBridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CoreStoreBridge.h; sourceTree = "<group>"; };
|
||||||
B559CD421CAA8B6300E4D58B /* CSSetupResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSSetupResult.swift; sourceTree = "<group>"; };
|
B559CD421CAA8B6300E4D58B /* CSSetupResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSSetupResult.swift; sourceTree = "<group>"; };
|
||||||
B559CD481CAA8C6D00E4D58B /* CSStorageInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSStorageInterface.swift; sourceTree = "<group>"; };
|
B559CD481CAA8C6D00E4D58B /* CSStorageInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSStorageInterface.swift; sourceTree = "<group>"; };
|
||||||
@@ -800,18 +859,22 @@
|
|||||||
B56923DF1EB827F5007C4DC9 /* XcodeSchemaMappingProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XcodeSchemaMappingProvider.swift; sourceTree = "<group>"; };
|
B56923DF1EB827F5007C4DC9 /* XcodeSchemaMappingProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XcodeSchemaMappingProvider.swift; sourceTree = "<group>"; };
|
||||||
B56923F41EB828BF007C4DC9 /* CSDynamicSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSDynamicSchema.swift; sourceTree = "<group>"; };
|
B56923F41EB828BF007C4DC9 /* CSDynamicSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSDynamicSchema.swift; sourceTree = "<group>"; };
|
||||||
B56923F91EB82956007C4DC9 /* CSXcodeDataModelSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSXcodeDataModelSchema.swift; sourceTree = "<group>"; };
|
B56923F91EB82956007C4DC9 /* CSXcodeDataModelSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSXcodeDataModelSchema.swift; sourceTree = "<group>"; };
|
||||||
B56923FE1EB82976007C4DC9 /* CSLegacyXcodeDataModelSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSLegacyXcodeDataModelSchema.swift; sourceTree = "<group>"; };
|
B56923FE1EB82976007C4DC9 /* CSUnsafeDataModelSchema.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSUnsafeDataModelSchema.swift; sourceTree = "<group>"; };
|
||||||
B56964D31B22FFAD0075EE4A /* DataStack+Migration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "DataStack+Migration.swift"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
|
B56964D31B22FFAD0075EE4A /* DataStack+Migration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "DataStack+Migration.swift"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
|
||||||
B56965231B356B820075EE4A /* MigrationResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MigrationResult.swift; sourceTree = "<group>"; };
|
B56965231B356B820075EE4A /* MigrationResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MigrationResult.swift; sourceTree = "<group>"; };
|
||||||
B57D27BD1D0BBE8200539C58 /* BaseTestDataTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseTestDataTestCase.swift; sourceTree = "<group>"; };
|
B57D27BD1D0BBE8200539C58 /* BaseTestDataTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseTestDataTestCase.swift; sourceTree = "<group>"; };
|
||||||
B57D27C11D0BC20100539C58 /* QueryTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QueryTests.swift; sourceTree = "<group>"; };
|
B57D27C11D0BC20100539C58 /* QueryTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QueryTests.swift; sourceTree = "<group>"; };
|
||||||
B58085741CDF7F00004C2EEB /* SetupTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetupTests.swift; sourceTree = "<group>"; };
|
B58085741CDF7F00004C2EEB /* SetupTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetupTests.swift; sourceTree = "<group>"; };
|
||||||
|
B5831B6F1F34AC3400A9F647 /* AttributeProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttributeProtocol.swift; sourceTree = "<group>"; };
|
||||||
|
B5831B741F34AC7A00A9F647 /* RelationshipProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelationshipProtocol.swift; sourceTree = "<group>"; };
|
||||||
|
B5831B791F34ACBA00A9F647 /* Transformable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Transformable.swift; sourceTree = "<group>"; };
|
||||||
B58D0C621EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+DynamicModel.swift"; sourceTree = "<group>"; };
|
B58D0C621EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+DynamicModel.swift"; sourceTree = "<group>"; };
|
||||||
B596BBAD1DD59FDB001DCDD9 /* ConvenienceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConvenienceTests.swift; sourceTree = "<group>"; };
|
B596BBAD1DD59FDB001DCDD9 /* ConvenienceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConvenienceTests.swift; sourceTree = "<group>"; };
|
||||||
B596BBB51DD5BC67001DCDD9 /* FetchableSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchableSource.swift; sourceTree = "<group>"; };
|
B596BBB51DD5BC67001DCDD9 /* FetchableSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchableSource.swift; sourceTree = "<group>"; };
|
||||||
B596BBBA1DD5C39F001DCDD9 /* QueryableSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QueryableSource.swift; sourceTree = "<group>"; };
|
B596BBBA1DD5C39F001DCDD9 /* QueryableSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QueryableSource.swift; sourceTree = "<group>"; };
|
||||||
B59AFF401C6593E400C0ABE2 /* NSPersistentStoreCoordinator+Setup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSPersistentStoreCoordinator+Setup.swift"; sourceTree = "<group>"; };
|
B59AFF401C6593E400C0ABE2 /* NSPersistentStoreCoordinator+Setup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSPersistentStoreCoordinator+Setup.swift"; sourceTree = "<group>"; };
|
||||||
B59FA0AD1CCBAC95007C9BCA /* ICloudStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ICloudStore.swift; sourceTree = "<group>"; };
|
B59FA0AD1CCBAC95007C9BCA /* ICloudStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ICloudStore.swift; sourceTree = "<group>"; };
|
||||||
|
B5A1DAC71F111BFA003CF369 /* KeyPath+Querying.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KeyPath+Querying.swift"; sourceTree = "<group>"; };
|
||||||
B5A261201B64BFDB006EB6D3 /* MigrationType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MigrationType.swift; sourceTree = "<group>"; };
|
B5A261201B64BFDB006EB6D3 /* MigrationType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MigrationType.swift; sourceTree = "<group>"; };
|
||||||
B5A5F2651CAEC50F004AB9AF /* CSSelect.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSSelect.swift; sourceTree = "<group>"; };
|
B5A5F2651CAEC50F004AB9AF /* CSSelect.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSSelect.swift; sourceTree = "<group>"; };
|
||||||
B5A991EB1E9DC2CE0091A2E3 /* VersionLock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VersionLock.swift; sourceTree = "<group>"; };
|
B5A991EB1E9DC2CE0091A2E3 /* VersionLock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VersionLock.swift; sourceTree = "<group>"; };
|
||||||
@@ -822,7 +885,10 @@
|
|||||||
B5BDC9271C2024F2008147CD /* .travis.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = .travis.yml; sourceTree = SOURCE_ROOT; };
|
B5BDC9271C2024F2008147CD /* .travis.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = .travis.yml; sourceTree = SOURCE_ROOT; };
|
||||||
B5C976E21C6C9F6A00B1AF90 /* UnsafeDataTransaction+Observing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UnsafeDataTransaction+Observing.swift"; sourceTree = "<group>"; };
|
B5C976E21C6C9F6A00B1AF90 /* UnsafeDataTransaction+Observing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UnsafeDataTransaction+Observing.swift"; sourceTree = "<group>"; };
|
||||||
B5C976E61C6E3A5900B1AF90 /* CoreStoreFetchedResultsController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreStoreFetchedResultsController.swift; sourceTree = "<group>"; };
|
B5C976E61C6E3A5900B1AF90 /* CoreStoreFetchedResultsController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreStoreFetchedResultsController.swift; sourceTree = "<group>"; };
|
||||||
|
B5CA2B071F7E5ACA004B1936 /* WhereClauseType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WhereClauseType.swift; sourceTree = "<group>"; };
|
||||||
|
B5CA2B111F81DBFE004B1936 /* DynamicKeyPath.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DynamicKeyPath.swift; sourceTree = "<group>"; };
|
||||||
B5D1E22B19FA9FBC003B2874 /* CoreStoreError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreStoreError.swift; sourceTree = "<group>"; };
|
B5D1E22B19FA9FBC003B2874 /* CoreStoreError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreStoreError.swift; sourceTree = "<group>"; };
|
||||||
|
B5D2D5A91F7558CB00A4DE67 /* .cocoapods.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = .cocoapods.yml; sourceTree = SOURCE_ROOT; };
|
||||||
B5D339B31E925C2B00C880DE /* DynamicModelTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DynamicModelTests.swift; sourceTree = "<group>"; };
|
B5D339B31E925C2B00C880DE /* DynamicModelTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DynamicModelTests.swift; sourceTree = "<group>"; };
|
||||||
B5D339D71E9489AB00C880DE /* CoreStoreObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreStoreObject.swift; sourceTree = "<group>"; };
|
B5D339D71E9489AB00C880DE /* CoreStoreObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreStoreObject.swift; sourceTree = "<group>"; };
|
||||||
B5D339DC1E9489C700C880DE /* DynamicObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DynamicObject.swift; sourceTree = "<group>"; };
|
B5D339DC1E9489C700C880DE /* DynamicObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DynamicObject.swift; sourceTree = "<group>"; };
|
||||||
@@ -888,7 +954,9 @@
|
|||||||
B5E84F321AFF85470064E85B /* NSManagedObjectContext+Setup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+Setup.swift"; sourceTree = "<group>"; };
|
B5E84F321AFF85470064E85B /* NSManagedObjectContext+Setup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+Setup.swift"; sourceTree = "<group>"; };
|
||||||
B5E84F331AFF85470064E85B /* NSManagedObjectContext+Transaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+Transaction.swift"; sourceTree = "<group>"; };
|
B5E84F331AFF85470064E85B /* NSManagedObjectContext+Transaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+Transaction.swift"; sourceTree = "<group>"; };
|
||||||
B5E84F351AFF85470064E85B /* NSManagedObjectContext+Querying.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+Querying.swift"; sourceTree = "<group>"; };
|
B5E84F351AFF85470064E85B /* NSManagedObjectContext+Querying.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+Querying.swift"; sourceTree = "<group>"; };
|
||||||
B5E84F401AFF8CCD0064E85B /* ClauseTypes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClauseTypes.swift; sourceTree = "<group>"; };
|
B5E84F401AFF8CCD0064E85B /* TypeErasedClauses.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TypeErasedClauses.swift; sourceTree = "<group>"; };
|
||||||
|
B5E8A71F21C1015300EF006A /* CoreStoreObject+Observing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CoreStoreObject+Observing.swift"; sourceTree = "<group>"; };
|
||||||
|
B5E8A72621C3B85000EF006A /* Playground.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = Playground.playground; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
|
||||||
B5ECDBDE1CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CSBaseDataTransaction+Querying.swift"; sourceTree = "<group>"; };
|
B5ECDBDE1CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CSBaseDataTransaction+Querying.swift"; sourceTree = "<group>"; };
|
||||||
B5ECDBE41CA6BEA300C7F112 /* CSClauseTypes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSClauseTypes.swift; sourceTree = "<group>"; };
|
B5ECDBE41CA6BEA300C7F112 /* CSClauseTypes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSClauseTypes.swift; sourceTree = "<group>"; };
|
||||||
B5ECDBEB1CA6BF2000C7F112 /* CSFrom.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSFrom.swift; sourceTree = "<group>"; };
|
B5ECDBEB1CA6BF2000C7F112 /* CSFrom.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSFrom.swift; sourceTree = "<group>"; };
|
||||||
@@ -979,6 +1047,7 @@
|
|||||||
2F03A52619C5C6DA005002A5 = {
|
2F03A52619C5C6DA005002A5 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
B5E8A72621C3B85000EF006A /* Playground.playground */,
|
||||||
2F291E3119C6D4D3007AF63F /* Frameworks */,
|
2F291E3119C6D4D3007AF63F /* Frameworks */,
|
||||||
2F03A53219C5C6DA005002A5 /* Sources */,
|
2F03A53219C5C6DA005002A5 /* Sources */,
|
||||||
2F03A53C19C5C6DA005002A5 /* CoreStoreTests */,
|
2F03A53C19C5C6DA005002A5 /* CoreStoreTests */,
|
||||||
@@ -1019,7 +1088,9 @@
|
|||||||
B5E84ED91AFF82360064E85B /* LICENSE */,
|
B5E84ED91AFF82360064E85B /* LICENSE */,
|
||||||
B5D9C8F61B160ED200E64F0E /* CoreStore.podspec */,
|
B5D9C8F61B160ED200E64F0E /* CoreStore.podspec */,
|
||||||
B5BDC91A1C202269008147CD /* Cartfile */,
|
B5BDC91A1C202269008147CD /* Cartfile */,
|
||||||
|
B5D2D5A91F7558CB00A4DE67 /* .cocoapods.yml */,
|
||||||
B5BDC9271C2024F2008147CD /* .travis.yml */,
|
B5BDC9271C2024F2008147CD /* .travis.yml */,
|
||||||
|
B524E78721CA20AC00BEB794 /* .jazzy.yaml */,
|
||||||
B5AD60CD1C90141E00F2B2E8 /* Package.swift */,
|
B5AD60CD1C90141E00F2B2E8 /* Package.swift */,
|
||||||
);
|
);
|
||||||
name = "Supporting Files";
|
name = "Supporting Files";
|
||||||
@@ -1102,13 +1173,24 @@
|
|||||||
name = Observing;
|
name = Observing;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
B5215CA21FA47BF300139E3A /* Chained Clauses */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
B55514E91EED8BF900BAB888 /* From+Querying.swift */,
|
||||||
|
B5215CA31FA47DFD00139E3A /* FetchChainBuilder.swift */,
|
||||||
|
B5215CA81FA4810300139E3A /* QueryChainBuilder.swift */,
|
||||||
|
B5215CAD1FA4812500139E3A /* SectionMonitorBuilder.swift */,
|
||||||
|
);
|
||||||
|
name = "Chained Clauses";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
B52F74391E9B8724005F3DAC /* Dynamic Schema */ = {
|
B52F74391E9B8724005F3DAC /* Dynamic Schema */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
B52F743A1E9B8724005F3DAC /* DynamicSchema.swift */,
|
B52F743A1E9B8724005F3DAC /* DynamicSchema.swift */,
|
||||||
B52F74491E9B8740005F3DAC /* CoreStoreSchema.swift */,
|
B52F74491E9B8740005F3DAC /* CoreStoreSchema.swift */,
|
||||||
B52F743C1E9B8724005F3DAC /* XcodeDataModelSchema.swift */,
|
B52F743C1E9B8724005F3DAC /* XcodeDataModelSchema.swift */,
|
||||||
B52F743B1E9B8724005F3DAC /* LegacyXcodeDataModelSchema.swift */,
|
B52F743B1E9B8724005F3DAC /* UnsafeDataModelSchema.swift */,
|
||||||
);
|
);
|
||||||
name = "Dynamic Schema";
|
name = "Dynamic Schema";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1190,7 +1272,7 @@
|
|||||||
children = (
|
children = (
|
||||||
B56923F41EB828BF007C4DC9 /* CSDynamicSchema.swift */,
|
B56923F41EB828BF007C4DC9 /* CSDynamicSchema.swift */,
|
||||||
B56923F91EB82956007C4DC9 /* CSXcodeDataModelSchema.swift */,
|
B56923F91EB82956007C4DC9 /* CSXcodeDataModelSchema.swift */,
|
||||||
B56923FE1EB82976007C4DC9 /* CSLegacyXcodeDataModelSchema.swift */,
|
B56923FE1EB82976007C4DC9 /* CSUnsafeDataModelSchema.swift */,
|
||||||
);
|
);
|
||||||
name = "Dynamic Schema";
|
name = "Dynamic Schema";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1224,17 +1306,37 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
B5D339D71E9489AB00C880DE /* CoreStoreObject.swift */,
|
B5D339D71E9489AB00C880DE /* CoreStoreObject.swift */,
|
||||||
|
B53CA9A11EF1EF1600E0F440 /* PartialObject.swift */,
|
||||||
|
B5831B6E1F3355C300A9F647 /* Properties */,
|
||||||
B52F74391E9B8724005F3DAC /* Dynamic Schema */,
|
B52F74391E9B8724005F3DAC /* Dynamic Schema */,
|
||||||
B5D339DC1E9489C700C880DE /* DynamicObject.swift */,
|
B5D339DC1E9489C700C880DE /* DynamicObject.swift */,
|
||||||
B52F742E1E9B50D0005F3DAC /* SchemaHistory.swift */,
|
B52F742E1E9B50D0005F3DAC /* SchemaHistory.swift */,
|
||||||
B5D339E61E9493A500C880DE /* Entity.swift */,
|
B5D339E61E9493A500C880DE /* Entity.swift */,
|
||||||
B5D33A001E96012400C880DE /* Relationship.swift */,
|
|
||||||
B5D339E11E948C3600C880DE /* Value.swift */,
|
|
||||||
B5A991EB1E9DC2CE0091A2E3 /* VersionLock.swift */,
|
B5A991EB1E9DC2CE0091A2E3 /* VersionLock.swift */,
|
||||||
);
|
);
|
||||||
name = "Dynamic Models";
|
name = "Dynamic Models";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
B5831B6E1F3355C300A9F647 /* Properties */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
B5D33A001E96012400C880DE /* Relationship.swift */,
|
||||||
|
B5D339E11E948C3600C880DE /* Value.swift */,
|
||||||
|
B5831B791F34ACBA00A9F647 /* Transformable.swift */,
|
||||||
|
);
|
||||||
|
name = Properties;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
B5A1DAC61F111BBE003CF369 /* KeyPath Utilities */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
B5A1DAC71F111BFA003CF369 /* KeyPath+Querying.swift */,
|
||||||
|
B5D339EB1E9495E500C880DE /* CoreStoreObject+Querying.swift */,
|
||||||
|
B5CA2B111F81DBFE004B1936 /* DynamicKeyPath.swift */,
|
||||||
|
);
|
||||||
|
name = "KeyPath Utilities";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
B5A5F26B1CAFF8D0004AB9AF /* Swift */ = {
|
B5A5F26B1CAFF8D0004AB9AF /* Swift */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -1358,13 +1460,14 @@
|
|||||||
B5E84EFD1AFF847B0064E85B /* Fetching and Querying */ = {
|
B5E84EFD1AFF847B0064E85B /* Fetching and Querying */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
B5D339EB1E9495E500C880DE /* CoreStoreObject+Querying.swift */,
|
|
||||||
B5E84EFE1AFF847B0064E85B /* BaseDataTransaction+Querying.swift */,
|
B5E84EFE1AFF847B0064E85B /* BaseDataTransaction+Querying.swift */,
|
||||||
B5E84F061AFF847B0064E85B /* DataStack+Querying.swift */,
|
B5E84F061AFF847B0064E85B /* DataStack+Querying.swift */,
|
||||||
B5E84F071AFF847B0064E85B /* CoreStore+Querying.swift */,
|
B5E84F071AFF847B0064E85B /* CoreStore+Querying.swift */,
|
||||||
B596BBB51DD5BC67001DCDD9 /* FetchableSource.swift */,
|
B596BBB51DD5BC67001DCDD9 /* FetchableSource.swift */,
|
||||||
B596BBBA1DD5C39F001DCDD9 /* QueryableSource.swift */,
|
B596BBBA1DD5C39F001DCDD9 /* QueryableSource.swift */,
|
||||||
B549F65D1E569C7400FBAB2D /* QueryableAttributeType.swift */,
|
B549F65D1E569C7400FBAB2D /* QueryableAttributeType.swift */,
|
||||||
|
B5215CA21FA47BF300139E3A /* Chained Clauses */,
|
||||||
|
B5A1DAC61F111BBE003CF369 /* KeyPath Utilities */,
|
||||||
B5E84F0A1AFF847B0064E85B /* Protocol Clauses */,
|
B5E84F0A1AFF847B0064E85B /* Protocol Clauses */,
|
||||||
B5E84EFF1AFF847B0064E85B /* Concrete Clauses */,
|
B5E84EFF1AFF847B0064E85B /* Concrete Clauses */,
|
||||||
);
|
);
|
||||||
@@ -1387,7 +1490,8 @@
|
|||||||
B5E84F0A1AFF847B0064E85B /* Protocol Clauses */ = {
|
B5E84F0A1AFF847B0064E85B /* Protocol Clauses */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
B5E84F401AFF8CCD0064E85B /* ClauseTypes.swift */,
|
B5E84F401AFF8CCD0064E85B /* TypeErasedClauses.swift */,
|
||||||
|
B5CA2B071F7E5ACA004B1936 /* WhereClauseType.swift */,
|
||||||
);
|
);
|
||||||
name = "Protocol Clauses";
|
name = "Protocol Clauses";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1398,6 +1502,7 @@
|
|||||||
B56007131B3F6C2800A9A8F9 /* SectionBy.swift */,
|
B56007131B3F6C2800A9A8F9 /* SectionBy.swift */,
|
||||||
B5E84F1A1AFF84860064E85B /* DataStack+Observing.swift */,
|
B5E84F1A1AFF84860064E85B /* DataStack+Observing.swift */,
|
||||||
B5E84F1B1AFF84860064E85B /* CoreStore+Observing.swift */,
|
B5E84F1B1AFF84860064E85B /* CoreStore+Observing.swift */,
|
||||||
|
B5E8A71F21C1015300EF006A /* CoreStoreObject+Observing.swift */,
|
||||||
B5C976E21C6C9F6A00B1AF90 /* UnsafeDataTransaction+Observing.swift */,
|
B5C976E21C6C9F6A00B1AF90 /* UnsafeDataTransaction+Observing.swift */,
|
||||||
B5E84F1C1AFF84860064E85B /* ObjectMonitor.swift */,
|
B5E84F1C1AFF84860064E85B /* ObjectMonitor.swift */,
|
||||||
B5E84F1F1AFF84860064E85B /* ObjectObserver.swift */,
|
B5E84F1F1AFF84860064E85B /* ObjectObserver.swift */,
|
||||||
@@ -1423,18 +1528,21 @@
|
|||||||
B5E84F291AFF849C0064E85B /* Internal */ = {
|
B5E84F291AFF849C0064E85B /* Internal */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
B5831B6F1F34AC3400A9F647 /* AttributeProtocol.swift */,
|
||||||
|
B5831B741F34AC7A00A9F647 /* RelationshipProtocol.swift */,
|
||||||
B5C976E61C6E3A5900B1AF90 /* CoreStoreFetchedResultsController.swift */,
|
B5C976E61C6E3A5900B1AF90 /* CoreStoreFetchedResultsController.swift */,
|
||||||
B526613F1CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift */,
|
B526613F1CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift */,
|
||||||
B51260881E9B252B00402229 /* NSEntityDescription+DynamicModel.swift */,
|
B53B275E1EE3B92E00E9B352 /* CoreStoreManagedObject.swift */,
|
||||||
B56923C31EB823B4007C4DC9 /* NSEntityDescription+Migration.swift */,
|
B533C4DA1D7D4BFA001383CB /* DispatchQueue+CoreStore.swift */,
|
||||||
B51260921E9B28F100402229 /* EntityIdentifier.swift */,
|
B51260921E9B28F100402229 /* EntityIdentifier.swift */,
|
||||||
B54A6A541BA15F2A007870FD /* FetchedResultsControllerDelegate.swift */,
|
B54A6A541BA15F2A007870FD /* FetchedResultsControllerDelegate.swift */,
|
||||||
B5E834BA1B7691F3001D3D50 /* Functions.swift */,
|
B5E834BA1B7691F3001D3D50 /* Functions.swift */,
|
||||||
B5FAD6AB1B51285300714891 /* MigrationManager.swift */,
|
B5FAD6AB1B51285300714891 /* MigrationManager.swift */,
|
||||||
B5E84F2B1AFF849C0064E85B /* NotificationObserver.swift */,
|
B5E84F2B1AFF849C0064E85B /* NotificationObserver.swift */,
|
||||||
B533C4DA1D7D4BFA001383CB /* DispatchQueue+CoreStore.swift */,
|
B51260881E9B252B00402229 /* NSEntityDescription+DynamicModel.swift */,
|
||||||
B52FD3A91E3B3EF10001D919 /* NSManagedObject+Logging.swift */,
|
B56923C31EB823B4007C4DC9 /* NSEntityDescription+Migration.swift */,
|
||||||
B58D0C621EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift */,
|
B58D0C621EAA0C7E003EDD87 /* NSManagedObject+DynamicModel.swift */,
|
||||||
|
B52FD3A91E3B3EF10001D919 /* NSManagedObject+Logging.swift */,
|
||||||
B5E84F2C1AFF849C0064E85B /* NSManagedObjectContext+CoreStore.swift */,
|
B5E84F2C1AFF849C0064E85B /* NSManagedObjectContext+CoreStore.swift */,
|
||||||
B5E84F351AFF85470064E85B /* NSManagedObjectContext+Querying.swift */,
|
B5E84F351AFF85470064E85B /* NSManagedObjectContext+Querying.swift */,
|
||||||
B5E84F321AFF85470064E85B /* NSManagedObjectContext+Setup.swift */,
|
B5E84F321AFF85470064E85B /* NSManagedObjectContext+Setup.swift */,
|
||||||
@@ -1656,32 +1764,32 @@
|
|||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 0730;
|
LastSwiftUpdateCheck = 0730;
|
||||||
LastUpgradeCheck = 0800;
|
LastUpgradeCheck = 0930;
|
||||||
ORGANIZATIONNAME = "John Rommel Estropia";
|
ORGANIZATIONNAME = "John Rommel Estropia";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
2F03A52F19C5C6DA005002A5 = {
|
2F03A52F19C5C6DA005002A5 = {
|
||||||
CreatedOnToolsVersion = 6.0;
|
CreatedOnToolsVersion = 6.0;
|
||||||
LastSwiftMigration = 0800;
|
LastSwiftMigration = 0900;
|
||||||
};
|
};
|
||||||
2F03A53A19C5C6DA005002A5 = {
|
2F03A53A19C5C6DA005002A5 = {
|
||||||
CreatedOnToolsVersion = 6.0;
|
CreatedOnToolsVersion = 6.0;
|
||||||
LastSwiftMigration = 0800;
|
LastSwiftMigration = 0900;
|
||||||
};
|
};
|
||||||
82BA18881C4BBCBA00A0916E = {
|
82BA18881C4BBCBA00A0916E = {
|
||||||
CreatedOnToolsVersion = 7.2;
|
CreatedOnToolsVersion = 7.2;
|
||||||
LastSwiftMigration = 0800;
|
LastSwiftMigration = 0900;
|
||||||
};
|
};
|
||||||
82BA18911C4BBCBA00A0916E = {
|
82BA18911C4BBCBA00A0916E = {
|
||||||
CreatedOnToolsVersion = 7.2;
|
CreatedOnToolsVersion = 7.2;
|
||||||
LastSwiftMigration = 0800;
|
LastSwiftMigration = 0900;
|
||||||
};
|
};
|
||||||
B52DD1731BE1F8CC00949AFE = {
|
B52DD1731BE1F8CC00949AFE = {
|
||||||
CreatedOnToolsVersion = 7.1;
|
CreatedOnToolsVersion = 7.1;
|
||||||
LastSwiftMigration = 0800;
|
LastSwiftMigration = 0900;
|
||||||
};
|
};
|
||||||
B52DD17C1BE1F8CC00949AFE = {
|
B52DD17C1BE1F8CC00949AFE = {
|
||||||
CreatedOnToolsVersion = 7.1;
|
CreatedOnToolsVersion = 7.1;
|
||||||
LastSwiftMigration = 0800;
|
LastSwiftMigration = 0900;
|
||||||
};
|
};
|
||||||
B563216E1BD65082006C9394 = {
|
B563216E1BD65082006C9394 = {
|
||||||
CreatedOnToolsVersion = 7.0.1;
|
CreatedOnToolsVersion = 7.0.1;
|
||||||
@@ -1771,6 +1879,7 @@
|
|||||||
files = (
|
files = (
|
||||||
B5E84F221AFF84860064E85B /* ObjectMonitor.swift in Sources */,
|
B5E84F221AFF84860064E85B /* ObjectMonitor.swift in Sources */,
|
||||||
B5ECDBF91CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift in Sources */,
|
B5ECDBF91CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift in Sources */,
|
||||||
|
B5CA2B081F7E5ACA004B1936 /* WhereClauseType.swift in Sources */,
|
||||||
B5C976E71C6E3A5A00B1AF90 /* CoreStoreFetchedResultsController.swift in Sources */,
|
B5C976E71C6E3A5A00B1AF90 /* CoreStoreFetchedResultsController.swift in Sources */,
|
||||||
B56923F51EB828BF007C4DC9 /* CSDynamicSchema.swift in Sources */,
|
B56923F51EB828BF007C4DC9 /* CSDynamicSchema.swift in Sources */,
|
||||||
B5F1DA901B9AA991007C5CBB /* ImportableUniqueObject.swift in Sources */,
|
B5F1DA901B9AA991007C5CBB /* ImportableUniqueObject.swift in Sources */,
|
||||||
@@ -1782,13 +1891,14 @@
|
|||||||
B5D339D81E9489AB00C880DE /* CoreStoreObject.swift in Sources */,
|
B5D339D81E9489AB00C880DE /* CoreStoreObject.swift in Sources */,
|
||||||
B5D3F6451C887C0A00C7492A /* LegacySQLiteStore.swift in Sources */,
|
B5D3F6451C887C0A00C7492A /* LegacySQLiteStore.swift in Sources */,
|
||||||
B56923FA1EB82956007C4DC9 /* CSXcodeDataModelSchema.swift in Sources */,
|
B56923FA1EB82956007C4DC9 /* CSXcodeDataModelSchema.swift in Sources */,
|
||||||
|
B55514EA1EED8BF900BAB888 /* From+Querying.swift in Sources */,
|
||||||
B596BBBB1DD5C39F001DCDD9 /* QueryableSource.swift in Sources */,
|
B596BBBB1DD5C39F001DCDD9 /* QueryableSource.swift in Sources */,
|
||||||
B5ECDBFF1CA80CBA00C7F112 /* CSWhere.swift in Sources */,
|
B5ECDBFF1CA80CBA00C7F112 /* CSWhere.swift in Sources */,
|
||||||
B5ECDC051CA8138100C7F112 /* CSOrderBy.swift in Sources */,
|
B5ECDC051CA8138100C7F112 /* CSOrderBy.swift in Sources */,
|
||||||
B5E1B5981CAA0C23007FD580 /* CSObjectObserver.swift in Sources */,
|
B5E1B5981CAA0C23007FD580 /* CSObjectObserver.swift in Sources */,
|
||||||
B5519A5F1CA21954002BEF78 /* CSAsynchronousDataTransaction.swift in Sources */,
|
B5519A5F1CA21954002BEF78 /* CSAsynchronousDataTransaction.swift in Sources */,
|
||||||
B52FD3AA1E3B3EF10001D919 /* NSManagedObject+Logging.swift in Sources */,
|
B52FD3AA1E3B3EF10001D919 /* NSManagedObject+Logging.swift in Sources */,
|
||||||
B52F74411E9B8724005F3DAC /* LegacyXcodeDataModelSchema.swift in Sources */,
|
B52F74411E9B8724005F3DAC /* UnsafeDataModelSchema.swift in Sources */,
|
||||||
B51FE5AB1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift in Sources */,
|
B51FE5AB1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift in Sources */,
|
||||||
B5A9921F1EA898710091A2E3 /* UserInfo.swift in Sources */,
|
B5A9921F1EA898710091A2E3 /* UserInfo.swift in Sources */,
|
||||||
B54A6A551BA15F2A007870FD /* FetchedResultsControllerDelegate.swift in Sources */,
|
B54A6A551BA15F2A007870FD /* FetchedResultsControllerDelegate.swift in Sources */,
|
||||||
@@ -1802,6 +1912,7 @@
|
|||||||
B5ECDC1D1CA81A2100C7F112 /* CSDataStack+Querying.swift in Sources */,
|
B5ECDC1D1CA81A2100C7F112 /* CSDataStack+Querying.swift in Sources */,
|
||||||
B5C976E31C6C9F6A00B1AF90 /* UnsafeDataTransaction+Observing.swift in Sources */,
|
B5C976E31C6C9F6A00B1AF90 /* UnsafeDataTransaction+Observing.swift in Sources */,
|
||||||
B53FBA121CAB63CB00F0D40A /* Progress+ObjectiveC.swift in Sources */,
|
B53FBA121CAB63CB00F0D40A /* Progress+ObjectiveC.swift in Sources */,
|
||||||
|
B5831B751F34AC7A00A9F647 /* RelationshipProtocol.swift in Sources */,
|
||||||
B5E1B5A81CAA49E2007FD580 /* CSDataStack+Migrating.swift in Sources */,
|
B5E1B5A81CAA49E2007FD580 /* CSDataStack+Migrating.swift in Sources */,
|
||||||
B5D339F11E94AF5800C880DE /* CoreStoreStrings.swift in Sources */,
|
B5D339F11E94AF5800C880DE /* CoreStoreStrings.swift in Sources */,
|
||||||
B56007161B4018AB00A9A8F9 /* MigrationChain.swift in Sources */,
|
B56007161B4018AB00A9A8F9 /* MigrationChain.swift in Sources */,
|
||||||
@@ -1820,6 +1931,7 @@
|
|||||||
B5FAD6AE1B518DCB00714891 /* CoreStore+Migration.swift in Sources */,
|
B5FAD6AE1B518DCB00714891 /* CoreStore+Migration.swift in Sources */,
|
||||||
B5E84EE71AFF84610064E85B /* CoreStore+Logging.swift in Sources */,
|
B5E84EE71AFF84610064E85B /* CoreStore+Logging.swift in Sources */,
|
||||||
B546F9731C9C553300D5AC55 /* SetupResult.swift in Sources */,
|
B546F9731C9C553300D5AC55 /* SetupResult.swift in Sources */,
|
||||||
|
B53CA9A21EF1EF1600E0F440 /* PartialObject.swift in Sources */,
|
||||||
B56007111B3F6BD500A9A8F9 /* Into.swift in Sources */,
|
B56007111B3F6BD500A9A8F9 /* Into.swift in Sources */,
|
||||||
B5E84F111AFF847B0064E85B /* Select.swift in Sources */,
|
B5E84F111AFF847B0064E85B /* Select.swift in Sources */,
|
||||||
B51260931E9B28F100402229 /* EntityIdentifier.swift in Sources */,
|
B51260931E9B28F100402229 /* EntityIdentifier.swift in Sources */,
|
||||||
@@ -1840,10 +1952,11 @@
|
|||||||
B501FDE71CA8D20500BE22EF /* CSListObserver.swift in Sources */,
|
B501FDE71CA8D20500BE22EF /* CSListObserver.swift in Sources */,
|
||||||
B5E41EC01EA9BB37006240F0 /* DynamicSchema+Convenience.swift in Sources */,
|
B5E41EC01EA9BB37006240F0 /* DynamicSchema+Convenience.swift in Sources */,
|
||||||
B501FDE21CA8D1F500BE22EF /* CSListMonitor.swift in Sources */,
|
B501FDE21CA8D1F500BE22EF /* CSListMonitor.swift in Sources */,
|
||||||
|
B5A1DAC81F111BFA003CF369 /* KeyPath+Querying.swift in Sources */,
|
||||||
2F291E2719C6D3CF007AF63F /* CoreStore.swift in Sources */,
|
2F291E2719C6D3CF007AF63F /* CoreStore.swift in Sources */,
|
||||||
B5ECDC111CA816E500C7F112 /* CSTweak.swift in Sources */,
|
B5ECDC111CA816E500C7F112 /* CSTweak.swift in Sources */,
|
||||||
B56923C41EB823B4007C4DC9 /* NSEntityDescription+Migration.swift in Sources */,
|
B56923C41EB823B4007C4DC9 /* NSEntityDescription+Migration.swift in Sources */,
|
||||||
B5E84F411AFF8CCD0064E85B /* ClauseTypes.swift in Sources */,
|
B5E84F411AFF8CCD0064E85B /* TypeErasedClauses.swift in Sources */,
|
||||||
B5E84F0D1AFF847B0064E85B /* BaseDataTransaction+Querying.swift in Sources */,
|
B5E84F0D1AFF847B0064E85B /* BaseDataTransaction+Querying.swift in Sources */,
|
||||||
B52F74451E9B8724005F3DAC /* XcodeDataModelSchema.swift in Sources */,
|
B52F74451E9B8724005F3DAC /* XcodeDataModelSchema.swift in Sources */,
|
||||||
B5FAD6AC1B51285300714891 /* MigrationManager.swift in Sources */,
|
B5FAD6AC1B51285300714891 /* MigrationManager.swift in Sources */,
|
||||||
@@ -1868,6 +1981,7 @@
|
|||||||
B5E84F0F1AFF847B0064E85B /* From.swift in Sources */,
|
B5E84F0F1AFF847B0064E85B /* From.swift in Sources */,
|
||||||
B5FAD6A91B50A4B400714891 /* Progress+Convenience.swift in Sources */,
|
B5FAD6A91B50A4B400714891 /* Progress+Convenience.swift in Sources */,
|
||||||
B5E84EFC1AFF846E0064E85B /* SynchronousDataTransaction.swift in Sources */,
|
B5E84EFC1AFF846E0064E85B /* SynchronousDataTransaction.swift in Sources */,
|
||||||
|
B5215CA91FA4810300139E3A /* QueryChainBuilder.swift in Sources */,
|
||||||
B5E222231CA4E12600BA2E95 /* CSSynchronousDataTransaction.swift in Sources */,
|
B5E222231CA4E12600BA2E95 /* CSSynchronousDataTransaction.swift in Sources */,
|
||||||
B5E84F281AFF84920064E85B /* NSManagedObject+Convenience.swift in Sources */,
|
B5E84F281AFF84920064E85B /* NSManagedObject+Convenience.swift in Sources */,
|
||||||
B52F744A1E9B8740005F3DAC /* CoreStoreSchema.swift in Sources */,
|
B52F744A1E9B8740005F3DAC /* CoreStoreSchema.swift in Sources */,
|
||||||
@@ -1875,6 +1989,8 @@
|
|||||||
B5E2222A1CA51B6E00BA2E95 /* CSUnsafeDataTransaction.swift in Sources */,
|
B5E2222A1CA51B6E00BA2E95 /* CSUnsafeDataTransaction.swift in Sources */,
|
||||||
B5E84F391AFF85470064E85B /* NSManagedObjectContext+Querying.swift in Sources */,
|
B5E84F391AFF85470064E85B /* NSManagedObjectContext+Querying.swift in Sources */,
|
||||||
B56923E81EB827F5007C4DC9 /* InferredSchemaMappingProvider.swift in Sources */,
|
B56923E81EB827F5007C4DC9 /* InferredSchemaMappingProvider.swift in Sources */,
|
||||||
|
B53B275F1EE3B92E00E9B352 /* CoreStoreManagedObject.swift in Sources */,
|
||||||
|
B5215CA41FA47DFD00139E3A /* FetchChainBuilder.swift in Sources */,
|
||||||
B5D33A011E96012400C880DE /* Relationship.swift in Sources */,
|
B5D33A011E96012400C880DE /* Relationship.swift in Sources */,
|
||||||
B5E84EE81AFF84610064E85B /* CoreStoreLogger.swift in Sources */,
|
B5E84EE81AFF84610064E85B /* CoreStoreLogger.swift in Sources */,
|
||||||
B56923C91EB82410007C4DC9 /* NSManagedObjectModel+Migration.swift in Sources */,
|
B56923C91EB82410007C4DC9 /* NSManagedObjectModel+Migration.swift in Sources */,
|
||||||
@@ -1892,21 +2008,26 @@
|
|||||||
B59FA0AE1CCBAC95007C9BCA /* ICloudStore.swift in Sources */,
|
B59FA0AE1CCBAC95007C9BCA /* ICloudStore.swift in Sources */,
|
||||||
B5E84EF81AFF846E0064E85B /* CoreStore+Transaction.swift in Sources */,
|
B5E84EF81AFF846E0064E85B /* CoreStore+Transaction.swift in Sources */,
|
||||||
B5E84F301AFF849C0064E85B /* NSManagedObjectContext+CoreStore.swift in Sources */,
|
B5E84F301AFF849C0064E85B /* NSManagedObjectContext+CoreStore.swift in Sources */,
|
||||||
|
B5831B7A1F34ACBA00A9F647 /* Transformable.swift in Sources */,
|
||||||
B546F9691C9AF26D00D5AC55 /* CSInMemoryStore.swift in Sources */,
|
B546F9691C9AF26D00D5AC55 /* CSInMemoryStore.swift in Sources */,
|
||||||
B53FBA1E1CAB63FA00F0D40A /* NSFetchedResultsController+ObjectiveC.swift in Sources */,
|
B53FBA1E1CAB63FA00F0D40A /* NSFetchedResultsController+ObjectiveC.swift in Sources */,
|
||||||
B549F65E1E569C7400FBAB2D /* QueryableAttributeType.swift in Sources */,
|
B549F65E1E569C7400FBAB2D /* QueryableAttributeType.swift in Sources */,
|
||||||
B5E84F211AFF84860064E85B /* CoreStore+Observing.swift in Sources */,
|
B5E84F211AFF84860064E85B /* CoreStore+Observing.swift in Sources */,
|
||||||
B559CD431CAA8B6300E4D58B /* CSSetupResult.swift in Sources */,
|
B559CD431CAA8B6300E4D58B /* CSSetupResult.swift in Sources */,
|
||||||
|
B5CA2B121F81DBFE004B1936 /* DynamicKeyPath.swift in Sources */,
|
||||||
B5A991EC1E9DC2CE0091A2E3 /* VersionLock.swift in Sources */,
|
B5A991EC1E9DC2CE0091A2E3 /* VersionLock.swift in Sources */,
|
||||||
B5FE4DA71C84FB4400FA6A91 /* InMemoryStore.swift in Sources */,
|
B5FE4DA71C84FB4400FA6A91 /* InMemoryStore.swift in Sources */,
|
||||||
B52F743D1E9B8724005F3DAC /* DynamicSchema.swift in Sources */,
|
B52F743D1E9B8724005F3DAC /* DynamicSchema.swift in Sources */,
|
||||||
B56923FF1EB82976007C4DC9 /* CSLegacyXcodeDataModelSchema.swift in Sources */,
|
B5E8A72021C1015300EF006A /* CoreStoreObject+Observing.swift in Sources */,
|
||||||
|
B56923FF1EB82976007C4DC9 /* CSUnsafeDataModelSchema.swift in Sources */,
|
||||||
|
B5215CAE1FA4812500139E3A /* SectionMonitorBuilder.swift in Sources */,
|
||||||
B5ECDBEC1CA6BF2000C7F112 /* CSFrom.swift in Sources */,
|
B5ECDBEC1CA6BF2000C7F112 /* CSFrom.swift in Sources */,
|
||||||
B56923EC1EB827F6007C4DC9 /* SchemaMappingProvider.swift in Sources */,
|
B56923EC1EB827F6007C4DC9 /* SchemaMappingProvider.swift in Sources */,
|
||||||
B5E834B91B76311F001D3D50 /* BaseDataTransaction+Importing.swift in Sources */,
|
B5E834B91B76311F001D3D50 /* BaseDataTransaction+Importing.swift in Sources */,
|
||||||
B5E84EE61AFF84610064E85B /* DefaultLogger.swift in Sources */,
|
B5E84EE61AFF84610064E85B /* DefaultLogger.swift in Sources */,
|
||||||
B53FBA041CAB300C00F0D40A /* CSMigrationType.swift in Sources */,
|
B53FBA041CAB300C00F0D40A /* CSMigrationType.swift in Sources */,
|
||||||
B5E84EF41AFF846E0064E85B /* AsynchronousDataTransaction.swift in Sources */,
|
B5E84EF41AFF846E0064E85B /* AsynchronousDataTransaction.swift in Sources */,
|
||||||
|
B5831B701F34AC3400A9F647 /* AttributeProtocol.swift in Sources */,
|
||||||
B5DBE2CD1C9914A900B5CEFA /* CSCoreStore.swift in Sources */,
|
B5DBE2CD1C9914A900B5CEFA /* CSCoreStore.swift in Sources */,
|
||||||
B546F95D1C9A12B800D5AC55 /* CSSQliteStore.swift in Sources */,
|
B546F95D1C9A12B800D5AC55 /* CSSQliteStore.swift in Sources */,
|
||||||
B5D339E71E9493A500C880DE /* Entity.swift in Sources */,
|
B5D339E71E9493A500C880DE /* Entity.swift in Sources */,
|
||||||
@@ -1955,6 +2076,7 @@
|
|||||||
files = (
|
files = (
|
||||||
82BA18B61C4BBD3F00A0916E /* DataStack+Querying.swift in Sources */,
|
82BA18B61C4BBD3F00A0916E /* DataStack+Querying.swift in Sources */,
|
||||||
B5ECDBFB1CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift in Sources */,
|
B5ECDBFB1CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift in Sources */,
|
||||||
|
B5CA2B091F7E5ACA004B1936 /* WhereClauseType.swift in Sources */,
|
||||||
B5C976E81C6E3A5D00B1AF90 /* CoreStoreFetchedResultsController.swift in Sources */,
|
B5C976E81C6E3A5D00B1AF90 /* CoreStoreFetchedResultsController.swift in Sources */,
|
||||||
B56923F61EB828BF007C4DC9 /* CSDynamicSchema.swift in Sources */,
|
B56923F61EB828BF007C4DC9 /* CSDynamicSchema.swift in Sources */,
|
||||||
82BA18A21C4BBD1D00A0916E /* CoreStoreError.swift in Sources */,
|
82BA18A21C4BBD1D00A0916E /* CoreStoreError.swift in Sources */,
|
||||||
@@ -1966,13 +2088,14 @@
|
|||||||
B5D339D91E9489AB00C880DE /* CoreStoreObject.swift in Sources */,
|
B5D339D91E9489AB00C880DE /* CoreStoreObject.swift in Sources */,
|
||||||
82BA18CE1C4BBD7100A0916E /* FetchedResultsControllerDelegate.swift in Sources */,
|
82BA18CE1C4BBD7100A0916E /* FetchedResultsControllerDelegate.swift in Sources */,
|
||||||
B56923FB1EB82956007C4DC9 /* CSXcodeDataModelSchema.swift in Sources */,
|
B56923FB1EB82956007C4DC9 /* CSXcodeDataModelSchema.swift in Sources */,
|
||||||
|
B55514EB1EED8BF900BAB888 /* From+Querying.swift in Sources */,
|
||||||
B596BBBC1DD5C39F001DCDD9 /* QueryableSource.swift in Sources */,
|
B596BBBC1DD5C39F001DCDD9 /* QueryableSource.swift in Sources */,
|
||||||
B5ECDC011CA80CBA00C7F112 /* CSWhere.swift in Sources */,
|
B5ECDC011CA80CBA00C7F112 /* CSWhere.swift in Sources */,
|
||||||
B5ECDC071CA8138100C7F112 /* CSOrderBy.swift in Sources */,
|
B5ECDC071CA8138100C7F112 /* CSOrderBy.swift in Sources */,
|
||||||
B5E1B59A1CAA0C23007FD580 /* CSObjectObserver.swift in Sources */,
|
B5E1B59A1CAA0C23007FD580 /* CSObjectObserver.swift in Sources */,
|
||||||
B5519A601CA21954002BEF78 /* CSAsynchronousDataTransaction.swift in Sources */,
|
B5519A601CA21954002BEF78 /* CSAsynchronousDataTransaction.swift in Sources */,
|
||||||
B52FD3AB1E3B3EF10001D919 /* NSManagedObject+Logging.swift in Sources */,
|
B52FD3AB1E3B3EF10001D919 /* NSManagedObject+Logging.swift in Sources */,
|
||||||
B52F74421E9B8724005F3DAC /* LegacyXcodeDataModelSchema.swift in Sources */,
|
B52F74421E9B8724005F3DAC /* UnsafeDataModelSchema.swift in Sources */,
|
||||||
B51FE5AD1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift in Sources */,
|
B51FE5AD1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift in Sources */,
|
||||||
B5A992201EA898720091A2E3 /* UserInfo.swift in Sources */,
|
B5A992201EA898720091A2E3 /* UserInfo.swift in Sources */,
|
||||||
B5FE4DAD1C85D44E00FA6A91 /* SQLiteStore.swift in Sources */,
|
B5FE4DAD1C85D44E00FA6A91 /* SQLiteStore.swift in Sources */,
|
||||||
@@ -1986,6 +2109,7 @@
|
|||||||
B5ECDC1F1CA81A2100C7F112 /* CSDataStack+Querying.swift in Sources */,
|
B5ECDC1F1CA81A2100C7F112 /* CSDataStack+Querying.swift in Sources */,
|
||||||
B5C976E41C6C9F9A00B1AF90 /* UnsafeDataTransaction+Observing.swift in Sources */,
|
B5C976E41C6C9F9A00B1AF90 /* UnsafeDataTransaction+Observing.swift in Sources */,
|
||||||
B53FBA141CAB63CB00F0D40A /* Progress+ObjectiveC.swift in Sources */,
|
B53FBA141CAB63CB00F0D40A /* Progress+ObjectiveC.swift in Sources */,
|
||||||
|
B5831B761F34AC7A00A9F647 /* RelationshipProtocol.swift in Sources */,
|
||||||
B5E1B5AA1CAA49E2007FD580 /* CSDataStack+Migrating.swift in Sources */,
|
B5E1B5AA1CAA49E2007FD580 /* CSDataStack+Migrating.swift in Sources */,
|
||||||
B5D339F21E94AF5800C880DE /* CoreStoreStrings.swift in Sources */,
|
B5D339F21E94AF5800C880DE /* CoreStoreStrings.swift in Sources */,
|
||||||
B5D3F6461C887C0A00C7492A /* LegacySQLiteStore.swift in Sources */,
|
B5D3F6461C887C0A00C7492A /* LegacySQLiteStore.swift in Sources */,
|
||||||
@@ -2004,6 +2128,7 @@
|
|||||||
82BA18A31C4BBD2200A0916E /* DataStack.swift in Sources */,
|
82BA18A31C4BBD2200A0916E /* DataStack.swift in Sources */,
|
||||||
82BA18C81C4BBD5900A0916E /* MigrationChain.swift in Sources */,
|
82BA18C81C4BBD5900A0916E /* MigrationChain.swift in Sources */,
|
||||||
B546F9741C9C553300D5AC55 /* SetupResult.swift in Sources */,
|
B546F9741C9C553300D5AC55 /* SetupResult.swift in Sources */,
|
||||||
|
B53CA9A31EF1EF1600E0F440 /* PartialObject.swift in Sources */,
|
||||||
82BA18B11C4BBD3100A0916E /* SaveResult.swift in Sources */,
|
82BA18B11C4BBD3100A0916E /* SaveResult.swift in Sources */,
|
||||||
82BA18DD1C4BBE1400A0916E /* NSFetchedResultsController+Convenience.swift in Sources */,
|
82BA18DD1C4BBE1400A0916E /* NSFetchedResultsController+Convenience.swift in Sources */,
|
||||||
B51260941E9B28F100402229 /* EntityIdentifier.swift in Sources */,
|
B51260941E9B28F100402229 /* EntityIdentifier.swift in Sources */,
|
||||||
@@ -2024,6 +2149,7 @@
|
|||||||
B501FDE91CA8D20500BE22EF /* CSListObserver.swift in Sources */,
|
B501FDE91CA8D20500BE22EF /* CSListObserver.swift in Sources */,
|
||||||
B5E41EC11EA9BB37006240F0 /* DynamicSchema+Convenience.swift in Sources */,
|
B5E41EC11EA9BB37006240F0 /* DynamicSchema+Convenience.swift in Sources */,
|
||||||
B501FDE41CA8D1F500BE22EF /* CSListMonitor.swift in Sources */,
|
B501FDE41CA8D1F500BE22EF /* CSListMonitor.swift in Sources */,
|
||||||
|
B5A1DAC91F111BFA003CF369 /* KeyPath+Querying.swift in Sources */,
|
||||||
B5FE4DA31C8481E100FA6A91 /* StorageInterface.swift in Sources */,
|
B5FE4DA31C8481E100FA6A91 /* StorageInterface.swift in Sources */,
|
||||||
B5ECDC131CA816E500C7F112 /* CSTweak.swift in Sources */,
|
B5ECDC131CA816E500C7F112 /* CSTweak.swift in Sources */,
|
||||||
B56923C51EB823B4007C4DC9 /* NSEntityDescription+Migration.swift in Sources */,
|
B56923C51EB823B4007C4DC9 /* NSEntityDescription+Migration.swift in Sources */,
|
||||||
@@ -2052,6 +2178,7 @@
|
|||||||
82BA18C71C4BBD5900A0916E /* CoreStore+Migration.swift in Sources */,
|
82BA18C71C4BBD5900A0916E /* CoreStore+Migration.swift in Sources */,
|
||||||
B5E222251CA4E12600BA2E95 /* CSSynchronousDataTransaction.swift in Sources */,
|
B5E222251CA4E12600BA2E95 /* CSSynchronousDataTransaction.swift in Sources */,
|
||||||
82BA18C41C4BBD5300A0916E /* ListMonitor.swift in Sources */,
|
82BA18C41C4BBD5300A0916E /* ListMonitor.swift in Sources */,
|
||||||
|
B5215CAA1FA4810300139E3A /* QueryChainBuilder.swift in Sources */,
|
||||||
82BA18BA1C4BBD4A00A0916E /* Select.swift in Sources */,
|
82BA18BA1C4BBD4A00A0916E /* Select.swift in Sources */,
|
||||||
B52F744B1E9B8740005F3DAC /* CoreStoreSchema.swift in Sources */,
|
B52F744B1E9B8740005F3DAC /* CoreStoreSchema.swift in Sources */,
|
||||||
B5AEFAB61C9962AE00AD137F /* CoreStoreBridge.swift in Sources */,
|
B5AEFAB61C9962AE00AD137F /* CoreStoreBridge.swift in Sources */,
|
||||||
@@ -2059,6 +2186,8 @@
|
|||||||
82BA18A71C4BBD2900A0916E /* CoreStore+Logging.swift in Sources */,
|
82BA18A71C4BBD2900A0916E /* CoreStore+Logging.swift in Sources */,
|
||||||
82BA18D81C4BBD7100A0916E /* WeakObject.swift in Sources */,
|
82BA18D81C4BBD7100A0916E /* WeakObject.swift in Sources */,
|
||||||
B56923E91EB827F5007C4DC9 /* InferredSchemaMappingProvider.swift in Sources */,
|
B56923E91EB827F5007C4DC9 /* InferredSchemaMappingProvider.swift in Sources */,
|
||||||
|
B53B27601EE3B92E00E9B352 /* CoreStoreManagedObject.swift in Sources */,
|
||||||
|
B5215CA51FA47DFD00139E3A /* FetchChainBuilder.swift in Sources */,
|
||||||
B5D33A021E96012400C880DE /* Relationship.swift in Sources */,
|
B5D33A021E96012400C880DE /* Relationship.swift in Sources */,
|
||||||
B559CD4B1CAA8C6D00E4D58B /* CSStorageInterface.swift in Sources */,
|
B559CD4B1CAA8C6D00E4D58B /* CSStorageInterface.swift in Sources */,
|
||||||
B56923CA1EB82410007C4DC9 /* NSManagedObjectModel+Migration.swift in Sources */,
|
B56923CA1EB82410007C4DC9 /* NSManagedObjectModel+Migration.swift in Sources */,
|
||||||
@@ -2076,21 +2205,26 @@
|
|||||||
82BA18D31C4BBD7100A0916E /* NSManagedObjectContext+CoreStore.swift in Sources */,
|
82BA18D31C4BBD7100A0916E /* NSManagedObjectContext+CoreStore.swift in Sources */,
|
||||||
82BA18AD1C4BBD3100A0916E /* UnsafeDataTransaction.swift in Sources */,
|
82BA18AD1C4BBD3100A0916E /* UnsafeDataTransaction.swift in Sources */,
|
||||||
B546F96A1C9AF26D00D5AC55 /* CSInMemoryStore.swift in Sources */,
|
B546F96A1C9AF26D00D5AC55 /* CSInMemoryStore.swift in Sources */,
|
||||||
|
B5831B7B1F34ACBA00A9F647 /* Transformable.swift in Sources */,
|
||||||
B53FBA201CAB63FA00F0D40A /* NSFetchedResultsController+ObjectiveC.swift in Sources */,
|
B53FBA201CAB63FA00F0D40A /* NSFetchedResultsController+ObjectiveC.swift in Sources */,
|
||||||
82BA18A81C4BBD2900A0916E /* CoreStoreLogger.swift in Sources */,
|
82BA18A81C4BBD2900A0916E /* CoreStoreLogger.swift in Sources */,
|
||||||
B549F65F1E569C7400FBAB2D /* QueryableAttributeType.swift in Sources */,
|
B549F65F1E569C7400FBAB2D /* QueryableAttributeType.swift in Sources */,
|
||||||
B559CD451CAA8B6300E4D58B /* CSSetupResult.swift in Sources */,
|
B559CD451CAA8B6300E4D58B /* CSSetupResult.swift in Sources */,
|
||||||
82BA18B81C4BBD4200A0916E /* ClauseTypes.swift in Sources */,
|
82BA18B81C4BBD4200A0916E /* TypeErasedClauses.swift in Sources */,
|
||||||
|
B5CA2B131F81DBFE004B1936 /* DynamicKeyPath.swift in Sources */,
|
||||||
B5A991ED1E9DC2CE0091A2E3 /* VersionLock.swift in Sources */,
|
B5A991ED1E9DC2CE0091A2E3 /* VersionLock.swift in Sources */,
|
||||||
B5ECDBEE1CA6BF2000C7F112 /* CSFrom.swift in Sources */,
|
B5ECDBEE1CA6BF2000C7F112 /* CSFrom.swift in Sources */,
|
||||||
B52F743E1E9B8724005F3DAC /* DynamicSchema.swift in Sources */,
|
B52F743E1E9B8724005F3DAC /* DynamicSchema.swift in Sources */,
|
||||||
B56924001EB82976007C4DC9 /* CSLegacyXcodeDataModelSchema.swift in Sources */,
|
B5E8A72121C1015300EF006A /* CoreStoreObject+Observing.swift in Sources */,
|
||||||
|
B56924001EB82976007C4DC9 /* CSUnsafeDataModelSchema.swift in Sources */,
|
||||||
|
B5215CAF1FA4812500139E3A /* SectionMonitorBuilder.swift in Sources */,
|
||||||
82BA18D61C4BBD7100A0916E /* NSManagedObjectContext+Transaction.swift in Sources */,
|
82BA18D61C4BBD7100A0916E /* NSManagedObjectContext+Transaction.swift in Sources */,
|
||||||
B56923ED1EB827F6007C4DC9 /* SchemaMappingProvider.swift in Sources */,
|
B56923ED1EB827F6007C4DC9 /* SchemaMappingProvider.swift in Sources */,
|
||||||
82BA18B91C4BBD4A00A0916E /* From.swift in Sources */,
|
82BA18B91C4BBD4A00A0916E /* From.swift in Sources */,
|
||||||
B53FBA061CAB300C00F0D40A /* CSMigrationType.swift in Sources */,
|
B53FBA061CAB300C00F0D40A /* CSMigrationType.swift in Sources */,
|
||||||
82BA18BE1C4BBD4A00A0916E /* Tweak.swift in Sources */,
|
82BA18BE1C4BBD4A00A0916E /* Tweak.swift in Sources */,
|
||||||
B5DBE2CE1C9914A900B5CEFA /* CSCoreStore.swift in Sources */,
|
B5DBE2CE1C9914A900B5CEFA /* CSCoreStore.swift in Sources */,
|
||||||
|
B5831B711F34AC3400A9F647 /* AttributeProtocol.swift in Sources */,
|
||||||
B546F95E1C9A12B800D5AC55 /* CSSQliteStore.swift in Sources */,
|
B546F95E1C9A12B800D5AC55 /* CSSQliteStore.swift in Sources */,
|
||||||
B5ECDC0D1CA8161B00C7F112 /* CSGroupBy.swift in Sources */,
|
B5ECDC0D1CA8161B00C7F112 /* CSGroupBy.swift in Sources */,
|
||||||
B5D339E81E9493A500C880DE /* Entity.swift in Sources */,
|
B5D339E81E9493A500C880DE /* Entity.swift in Sources */,
|
||||||
@@ -2139,6 +2273,7 @@
|
|||||||
files = (
|
files = (
|
||||||
B5220E1E1D13080D009BC71E /* CSListMonitor.swift in Sources */,
|
B5220E1E1D13080D009BC71E /* CSListMonitor.swift in Sources */,
|
||||||
B5DBE2D01C9914A900B5CEFA /* CSCoreStore.swift in Sources */,
|
B5DBE2D01C9914A900B5CEFA /* CSCoreStore.swift in Sources */,
|
||||||
|
B5CA2B0B1F7E5ACA004B1936 /* WhereClauseType.swift in Sources */,
|
||||||
B5677D411CD3B1E400322BFC /* ICloudStoreObserver.swift in Sources */,
|
B5677D411CD3B1E400322BFC /* ICloudStoreObserver.swift in Sources */,
|
||||||
B56923F81EB828BF007C4DC9 /* CSDynamicSchema.swift in Sources */,
|
B56923F81EB828BF007C4DC9 /* CSDynamicSchema.swift in Sources */,
|
||||||
B52DD1BE1BE1F94300949AFE /* Progress+Convenience.swift in Sources */,
|
B52DD1BE1BE1F94300949AFE /* Progress+Convenience.swift in Sources */,
|
||||||
@@ -2150,13 +2285,14 @@
|
|||||||
B5D339DB1E9489AB00C880DE /* CoreStoreObject.swift in Sources */,
|
B5D339DB1E9489AB00C880DE /* CoreStoreObject.swift in Sources */,
|
||||||
B52DD1951BE1F92500949AFE /* CoreStoreError.swift in Sources */,
|
B52DD1951BE1F92500949AFE /* CoreStoreError.swift in Sources */,
|
||||||
B56923FD1EB82956007C4DC9 /* CSXcodeDataModelSchema.swift in Sources */,
|
B56923FD1EB82956007C4DC9 /* CSXcodeDataModelSchema.swift in Sources */,
|
||||||
|
B55514ED1EED8BF900BAB888 /* From+Querying.swift in Sources */,
|
||||||
B596BBBE1DD5C39F001DCDD9 /* QueryableSource.swift in Sources */,
|
B596BBBE1DD5C39F001DCDD9 /* QueryableSource.swift in Sources */,
|
||||||
B546F9601C9A12B800D5AC55 /* CSSQliteStore.swift in Sources */,
|
B546F9601C9A12B800D5AC55 /* CSSQliteStore.swift in Sources */,
|
||||||
B5ECDC0F1CA8161B00C7F112 /* CSGroupBy.swift in Sources */,
|
B5ECDC0F1CA8161B00C7F112 /* CSGroupBy.swift in Sources */,
|
||||||
B5ECDC211CA81A2100C7F112 /* CSDataStack+Querying.swift in Sources */,
|
B5ECDC211CA81A2100C7F112 /* CSDataStack+Querying.swift in Sources */,
|
||||||
B52DD1C21BE1F94600949AFE /* MigrationManager.swift in Sources */,
|
B52DD1C21BE1F94600949AFE /* MigrationManager.swift in Sources */,
|
||||||
B52FD3AD1E3B3EF10001D919 /* NSManagedObject+Logging.swift in Sources */,
|
B52FD3AD1E3B3EF10001D919 /* NSManagedObject+Logging.swift in Sources */,
|
||||||
B52F74441E9B8724005F3DAC /* LegacyXcodeDataModelSchema.swift in Sources */,
|
B52F74441E9B8724005F3DAC /* UnsafeDataModelSchema.swift in Sources */,
|
||||||
B5ECDC2D1CA81CC700C7F112 /* CSDataStack+Transaction.swift in Sources */,
|
B5ECDC2D1CA81CC700C7F112 /* CSDataStack+Transaction.swift in Sources */,
|
||||||
B5A992221EA898720091A2E3 /* UserInfo.swift in Sources */,
|
B5A992221EA898720091A2E3 /* UserInfo.swift in Sources */,
|
||||||
B5D7A5BA1CA3BF8F005C752B /* CSInto.swift in Sources */,
|
B5D7A5BA1CA3BF8F005C752B /* CSInto.swift in Sources */,
|
||||||
@@ -2170,6 +2306,7 @@
|
|||||||
B5D3F6481C887C0A00C7492A /* LegacySQLiteStore.swift in Sources */,
|
B5D3F6481C887C0A00C7492A /* LegacySQLiteStore.swift in Sources */,
|
||||||
B5220E1C1D130801009BC71E /* FetchedResultsControllerDelegate.swift in Sources */,
|
B5220E1C1D130801009BC71E /* FetchedResultsControllerDelegate.swift in Sources */,
|
||||||
B52DD19E1BE1F92C00949AFE /* AsynchronousDataTransaction.swift in Sources */,
|
B52DD19E1BE1F92C00949AFE /* AsynchronousDataTransaction.swift in Sources */,
|
||||||
|
B5831B781F34AC7A00A9F647 /* RelationshipProtocol.swift in Sources */,
|
||||||
B52DD1981BE1F92500949AFE /* CoreStore+Setup.swift in Sources */,
|
B52DD1981BE1F92500949AFE /* CoreStore+Setup.swift in Sources */,
|
||||||
B5D339F41E94AF5800C880DE /* CoreStoreStrings.swift in Sources */,
|
B5D339F41E94AF5800C880DE /* CoreStoreStrings.swift in Sources */,
|
||||||
B5220E241D13085E009BC71E /* NSFetchedResultsController+Convenience.swift in Sources */,
|
B5220E241D13085E009BC71E /* NSFetchedResultsController+Convenience.swift in Sources */,
|
||||||
@@ -2188,6 +2325,7 @@
|
|||||||
B52DD1961BE1F92500949AFE /* DataStack.swift in Sources */,
|
B52DD1961BE1F92500949AFE /* DataStack.swift in Sources */,
|
||||||
B5ECDBFD1CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift in Sources */,
|
B5ECDBFD1CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift in Sources */,
|
||||||
B52DD1BD1BE1F94300949AFE /* NSManagedObject+Convenience.swift in Sources */,
|
B52DD1BD1BE1F94300949AFE /* NSManagedObject+Convenience.swift in Sources */,
|
||||||
|
B53CA9A51EF1EF1600E0F440 /* PartialObject.swift in Sources */,
|
||||||
B52DD1AD1BE1F93900949AFE /* Where.swift in Sources */,
|
B52DD1AD1BE1F93900949AFE /* Where.swift in Sources */,
|
||||||
B53FBA1C1CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */,
|
B53FBA1C1CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */,
|
||||||
B51260961E9B28F100402229 /* EntityIdentifier.swift in Sources */,
|
B51260961E9B28F100402229 /* EntityIdentifier.swift in Sources */,
|
||||||
@@ -2208,6 +2346,7 @@
|
|||||||
B559CD4D1CAA8C6D00E4D58B /* CSStorageInterface.swift in Sources */,
|
B559CD4D1CAA8C6D00E4D58B /* CSStorageInterface.swift in Sources */,
|
||||||
B5E41EC31EA9BB37006240F0 /* DynamicSchema+Convenience.swift in Sources */,
|
B5E41EC31EA9BB37006240F0 /* DynamicSchema+Convenience.swift in Sources */,
|
||||||
B5ECDBE91CA6BEA300C7F112 /* CSClauseTypes.swift in Sources */,
|
B5ECDBE91CA6BEA300C7F112 /* CSClauseTypes.swift in Sources */,
|
||||||
|
B5A1DACB1F111BFA003CF369 /* KeyPath+Querying.swift in Sources */,
|
||||||
B52DD1B81BE1F94000949AFE /* DataStack+Migration.swift in Sources */,
|
B52DD1B81BE1F94000949AFE /* DataStack+Migration.swift in Sources */,
|
||||||
B5ECDC091CA8138100C7F112 /* CSOrderBy.swift in Sources */,
|
B5ECDC091CA8138100C7F112 /* CSOrderBy.swift in Sources */,
|
||||||
B56923C71EB823B4007C4DC9 /* NSEntityDescription+Migration.swift in Sources */,
|
B56923C71EB823B4007C4DC9 /* NSEntityDescription+Migration.swift in Sources */,
|
||||||
@@ -2236,6 +2375,7 @@
|
|||||||
B52DD1CB1BE1F94600949AFE /* WeakObject.swift in Sources */,
|
B52DD1CB1BE1F94600949AFE /* WeakObject.swift in Sources */,
|
||||||
B52DD1C11BE1F94600949AFE /* Functions.swift in Sources */,
|
B52DD1C11BE1F94600949AFE /* Functions.swift in Sources */,
|
||||||
B5220E1A1D130791009BC71E /* CoreStoreFetchedResultsController.swift in Sources */,
|
B5220E1A1D130791009BC71E /* CoreStoreFetchedResultsController.swift in Sources */,
|
||||||
|
B5215CAC1FA4810300139E3A /* QueryChainBuilder.swift in Sources */,
|
||||||
B53FBA0F1CAB5E6500F0D40A /* CSCoreStore+Migrating.swift in Sources */,
|
B53FBA0F1CAB5E6500F0D40A /* CSCoreStore+Migrating.swift in Sources */,
|
||||||
B52F744D1E9B8740005F3DAC /* CoreStoreSchema.swift in Sources */,
|
B52F744D1E9B8740005F3DAC /* CoreStoreSchema.swift in Sources */,
|
||||||
B59FA0B21CCBACA8007C9BCA /* ICloudStore.swift in Sources */,
|
B59FA0B21CCBACA8007C9BCA /* ICloudStore.swift in Sources */,
|
||||||
@@ -2243,6 +2383,8 @@
|
|||||||
B52DD1A71BE1F93200949AFE /* BaseDataTransaction+Querying.swift in Sources */,
|
B52DD1A71BE1F93200949AFE /* BaseDataTransaction+Querying.swift in Sources */,
|
||||||
B546F96C1C9AF26D00D5AC55 /* CSInMemoryStore.swift in Sources */,
|
B546F96C1C9AF26D00D5AC55 /* CSInMemoryStore.swift in Sources */,
|
||||||
B56923EB1EB827F5007C4DC9 /* InferredSchemaMappingProvider.swift in Sources */,
|
B56923EB1EB827F5007C4DC9 /* InferredSchemaMappingProvider.swift in Sources */,
|
||||||
|
B53B27621EE3B92E00E9B352 /* CoreStoreManagedObject.swift in Sources */,
|
||||||
|
B5215CA71FA47DFD00139E3A /* FetchChainBuilder.swift in Sources */,
|
||||||
B5D33A041E96012400C880DE /* Relationship.swift in Sources */,
|
B5D33A041E96012400C880DE /* Relationship.swift in Sources */,
|
||||||
B52DD1C61BE1F94600949AFE /* NSManagedObjectContext+CoreStore.swift in Sources */,
|
B52DD1C61BE1F94600949AFE /* NSManagedObjectContext+CoreStore.swift in Sources */,
|
||||||
B56923CC1EB82410007C4DC9 /* NSManagedObjectModel+Migration.swift in Sources */,
|
B56923CC1EB82410007C4DC9 /* NSManagedObjectModel+Migration.swift in Sources */,
|
||||||
@@ -2260,25 +2402,30 @@
|
|||||||
B52DD1A01BE1F92C00949AFE /* UnsafeDataTransaction.swift in Sources */,
|
B52DD1A01BE1F92C00949AFE /* UnsafeDataTransaction.swift in Sources */,
|
||||||
B5ECDC331CA81CDC00C7F112 /* CSCoreStore+Transaction.swift in Sources */,
|
B5ECDC331CA81CDC00C7F112 /* CSCoreStore+Transaction.swift in Sources */,
|
||||||
B52DD1BB1BE1F94000949AFE /* MigrationType.swift in Sources */,
|
B52DD1BB1BE1F94000949AFE /* MigrationType.swift in Sources */,
|
||||||
|
B5831B7D1F34ACBA00A9F647 /* Transformable.swift in Sources */,
|
||||||
B52DD1C91BE1F94600949AFE /* NSManagedObjectContext+Transaction.swift in Sources */,
|
B52DD1C91BE1F94600949AFE /* NSManagedObjectContext+Transaction.swift in Sources */,
|
||||||
B5220E151D130663009BC71E /* CoreStore+Observing.swift in Sources */,
|
B5220E151D130663009BC71E /* CoreStore+Observing.swift in Sources */,
|
||||||
B549F6611E569C7400FBAB2D /* QueryableAttributeType.swift in Sources */,
|
B549F6611E569C7400FBAB2D /* QueryableAttributeType.swift in Sources */,
|
||||||
B52DD19B1BE1F92800949AFE /* CoreStoreLogger.swift in Sources */,
|
B52DD19B1BE1F92800949AFE /* CoreStoreLogger.swift in Sources */,
|
||||||
B52DD1991BE1F92800949AFE /* DefaultLogger.swift in Sources */,
|
B52DD1991BE1F92800949AFE /* DefaultLogger.swift in Sources */,
|
||||||
|
B5CA2B151F81DBFF004B1936 /* DynamicKeyPath.swift in Sources */,
|
||||||
B5A991EF1E9DC2CE0091A2E3 /* VersionLock.swift in Sources */,
|
B5A991EF1E9DC2CE0091A2E3 /* VersionLock.swift in Sources */,
|
||||||
B5220E201D130813009BC71E /* CSObjectMonitor.swift in Sources */,
|
B5220E201D130813009BC71E /* CSObjectMonitor.swift in Sources */,
|
||||||
B52F74401E9B8724005F3DAC /* DynamicSchema.swift in Sources */,
|
B52F74401E9B8724005F3DAC /* DynamicSchema.swift in Sources */,
|
||||||
B56924021EB82976007C4DC9 /* CSLegacyXcodeDataModelSchema.swift in Sources */,
|
B5E8A72321C1015300EF006A /* CoreStoreObject+Observing.swift in Sources */,
|
||||||
|
B56924021EB82976007C4DC9 /* CSUnsafeDataModelSchema.swift in Sources */,
|
||||||
|
B5215CB11FA4812500139E3A /* SectionMonitorBuilder.swift in Sources */,
|
||||||
B5220E171D1306DF009BC71E /* UnsafeDataTransaction+Observing.swift in Sources */,
|
B5220E171D1306DF009BC71E /* UnsafeDataTransaction+Observing.swift in Sources */,
|
||||||
B56923EF1EB827F6007C4DC9 /* SchemaMappingProvider.swift in Sources */,
|
B56923EF1EB827F6007C4DC9 /* SchemaMappingProvider.swift in Sources */,
|
||||||
B53FBA081CAB300C00F0D40A /* CSMigrationType.swift in Sources */,
|
B53FBA081CAB300C00F0D40A /* CSMigrationType.swift in Sources */,
|
||||||
B52DD1B91BE1F94000949AFE /* CoreStore+Migration.swift in Sources */,
|
B52DD1B91BE1F94000949AFE /* CoreStore+Migration.swift in Sources */,
|
||||||
B5519A5C1CA2008C002BEF78 /* CSBaseDataTransaction.swift in Sources */,
|
B5519A5C1CA2008C002BEF78 /* CSBaseDataTransaction.swift in Sources */,
|
||||||
B5DBE2D51C991B3E00B5CEFA /* CSDataStack.swift in Sources */,
|
B5DBE2D51C991B3E00B5CEFA /* CSDataStack.swift in Sources */,
|
||||||
|
B5831B731F34AC3400A9F647 /* AttributeProtocol.swift in Sources */,
|
||||||
B5AEFAB81C9962AE00AD137F /* CoreStoreBridge.swift in Sources */,
|
B5AEFAB81C9962AE00AD137F /* CoreStoreBridge.swift in Sources */,
|
||||||
B598514B1C90289F00C99590 /* NSPersistentStoreCoordinator+Setup.swift in Sources */,
|
B598514B1C90289F00C99590 /* NSPersistentStoreCoordinator+Setup.swift in Sources */,
|
||||||
B5D339EA1E9493A500C880DE /* Entity.swift in Sources */,
|
B5D339EA1E9493A500C880DE /* Entity.swift in Sources */,
|
||||||
B52DD1AA1BE1F93500949AFE /* ClauseTypes.swift in Sources */,
|
B52DD1AA1BE1F93500949AFE /* TypeErasedClauses.swift in Sources */,
|
||||||
B53FBA021CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */,
|
B53FBA021CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */,
|
||||||
B51FE5AF1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift in Sources */,
|
B51FE5AF1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift in Sources */,
|
||||||
);
|
);
|
||||||
@@ -2323,6 +2470,7 @@
|
|||||||
files = (
|
files = (
|
||||||
B56321A91BD65219006C9394 /* Progress+Convenience.swift in Sources */,
|
B56321A91BD65219006C9394 /* Progress+Convenience.swift in Sources */,
|
||||||
B5ECDBFC1CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift in Sources */,
|
B5ECDBFC1CA804FD00C7F112 /* NSManagedObjectContext+ObjectiveC.swift in Sources */,
|
||||||
|
B5CA2B0A1F7E5ACA004B1936 /* WhereClauseType.swift in Sources */,
|
||||||
B5C976E91C6E3A5E00B1AF90 /* CoreStoreFetchedResultsController.swift in Sources */,
|
B5C976E91C6E3A5E00B1AF90 /* CoreStoreFetchedResultsController.swift in Sources */,
|
||||||
B56923F71EB828BF007C4DC9 /* CSDynamicSchema.swift in Sources */,
|
B56923F71EB828BF007C4DC9 /* CSDynamicSchema.swift in Sources */,
|
||||||
B56321801BD65216006C9394 /* CoreStoreError.swift in Sources */,
|
B56321801BD65216006C9394 /* CoreStoreError.swift in Sources */,
|
||||||
@@ -2334,13 +2482,14 @@
|
|||||||
B5D339DA1E9489AB00C880DE /* CoreStoreObject.swift in Sources */,
|
B5D339DA1E9489AB00C880DE /* CoreStoreObject.swift in Sources */,
|
||||||
B5ECDC021CA80CBA00C7F112 /* CSWhere.swift in Sources */,
|
B5ECDC021CA80CBA00C7F112 /* CSWhere.swift in Sources */,
|
||||||
B56923FC1EB82956007C4DC9 /* CSXcodeDataModelSchema.swift in Sources */,
|
B56923FC1EB82956007C4DC9 /* CSXcodeDataModelSchema.swift in Sources */,
|
||||||
|
B55514EC1EED8BF900BAB888 /* From+Querying.swift in Sources */,
|
||||||
B596BBBD1DD5C39F001DCDD9 /* QueryableSource.swift in Sources */,
|
B596BBBD1DD5C39F001DCDD9 /* QueryableSource.swift in Sources */,
|
||||||
B5ECDC081CA8138100C7F112 /* CSOrderBy.swift in Sources */,
|
B5ECDC081CA8138100C7F112 /* CSOrderBy.swift in Sources */,
|
||||||
B5E1B59B1CAA0C23007FD580 /* CSObjectObserver.swift in Sources */,
|
B5E1B59B1CAA0C23007FD580 /* CSObjectObserver.swift in Sources */,
|
||||||
B5519A611CA21954002BEF78 /* CSAsynchronousDataTransaction.swift in Sources */,
|
B5519A611CA21954002BEF78 /* CSAsynchronousDataTransaction.swift in Sources */,
|
||||||
B5FE4DAE1C85D44E00FA6A91 /* SQLiteStore.swift in Sources */,
|
B5FE4DAE1C85D44E00FA6A91 /* SQLiteStore.swift in Sources */,
|
||||||
B52FD3AC1E3B3EF10001D919 /* NSManagedObject+Logging.swift in Sources */,
|
B52FD3AC1E3B3EF10001D919 /* NSManagedObject+Logging.swift in Sources */,
|
||||||
B52F74431E9B8724005F3DAC /* LegacyXcodeDataModelSchema.swift in Sources */,
|
B52F74431E9B8724005F3DAC /* UnsafeDataModelSchema.swift in Sources */,
|
||||||
B51FE5AE1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift in Sources */,
|
B51FE5AE1CD4D00300E54258 /* CoreStore+CustomDebugStringConvertible.swift in Sources */,
|
||||||
B5A992211EA898720091A2E3 /* UserInfo.swift in Sources */,
|
B5A992211EA898720091A2E3 /* UserInfo.swift in Sources */,
|
||||||
B563218C1BD65216006C9394 /* DataStack+Transaction.swift in Sources */,
|
B563218C1BD65216006C9394 /* DataStack+Transaction.swift in Sources */,
|
||||||
@@ -2354,6 +2503,7 @@
|
|||||||
B5C976E51C6C9F9B00B1AF90 /* UnsafeDataTransaction+Observing.swift in Sources */,
|
B5C976E51C6C9F9B00B1AF90 /* UnsafeDataTransaction+Observing.swift in Sources */,
|
||||||
B53FBA151CAB63CB00F0D40A /* Progress+ObjectiveC.swift in Sources */,
|
B53FBA151CAB63CB00F0D40A /* Progress+ObjectiveC.swift in Sources */,
|
||||||
B5E1B5AB1CAA49E2007FD580 /* CSDataStack+Migrating.swift in Sources */,
|
B5E1B5AB1CAA49E2007FD580 /* CSDataStack+Migrating.swift in Sources */,
|
||||||
|
B5831B771F34AC7A00A9F647 /* RelationshipProtocol.swift in Sources */,
|
||||||
B5D3F6471C887C0A00C7492A /* LegacySQLiteStore.swift in Sources */,
|
B5D3F6471C887C0A00C7492A /* LegacySQLiteStore.swift in Sources */,
|
||||||
B5D339F31E94AF5800C880DE /* CoreStoreStrings.swift in Sources */,
|
B5D339F31E94AF5800C880DE /* CoreStoreStrings.swift in Sources */,
|
||||||
B5E1B5A01CAA2568007FD580 /* CSDataStack+Observing.swift in Sources */,
|
B5E1B5A01CAA2568007FD580 /* CSDataStack+Observing.swift in Sources */,
|
||||||
@@ -2372,6 +2522,7 @@
|
|||||||
B56321A81BD65219006C9394 /* NSManagedObject+Convenience.swift in Sources */,
|
B56321A81BD65219006C9394 /* NSManagedObject+Convenience.swift in Sources */,
|
||||||
B546F9751C9C553300D5AC55 /* SetupResult.swift in Sources */,
|
B546F9751C9C553300D5AC55 /* SetupResult.swift in Sources */,
|
||||||
B56321981BD65216006C9394 /* Where.swift in Sources */,
|
B56321981BD65216006C9394 /* Where.swift in Sources */,
|
||||||
|
B53CA9A41EF1EF1600E0F440 /* PartialObject.swift in Sources */,
|
||||||
B5202CFD1C046E8400DED140 /* NSFetchedResultsController+Convenience.swift in Sources */,
|
B5202CFD1C046E8400DED140 /* NSFetchedResultsController+Convenience.swift in Sources */,
|
||||||
B5FE4DA91C84FB4400FA6A91 /* InMemoryStore.swift in Sources */,
|
B5FE4DA91C84FB4400FA6A91 /* InMemoryStore.swift in Sources */,
|
||||||
B51260951E9B28F100402229 /* EntityIdentifier.swift in Sources */,
|
B51260951E9B28F100402229 /* EntityIdentifier.swift in Sources */,
|
||||||
@@ -2392,6 +2543,7 @@
|
|||||||
B501FDE51CA8D1F500BE22EF /* CSListMonitor.swift in Sources */,
|
B501FDE51CA8D1F500BE22EF /* CSListMonitor.swift in Sources */,
|
||||||
B5E41EC21EA9BB37006240F0 /* DynamicSchema+Convenience.swift in Sources */,
|
B5E41EC21EA9BB37006240F0 /* DynamicSchema+Convenience.swift in Sources */,
|
||||||
B5ECDC141CA816E500C7F112 /* CSTweak.swift in Sources */,
|
B5ECDC141CA816E500C7F112 /* CSTweak.swift in Sources */,
|
||||||
|
B5A1DACA1F111BFA003CF369 /* KeyPath+Querying.swift in Sources */,
|
||||||
B56321AE1BD6521C006C9394 /* NotificationObserver.swift in Sources */,
|
B56321AE1BD6521C006C9394 /* NotificationObserver.swift in Sources */,
|
||||||
B56321931BD65216006C9394 /* DataStack+Querying.swift in Sources */,
|
B56321931BD65216006C9394 /* DataStack+Querying.swift in Sources */,
|
||||||
B56923C61EB823B4007C4DC9 /* NSEntityDescription+Migration.swift in Sources */,
|
B56923C61EB823B4007C4DC9 /* NSEntityDescription+Migration.swift in Sources */,
|
||||||
@@ -2420,6 +2572,7 @@
|
|||||||
B563218E1BD65216006C9394 /* SaveResult.swift in Sources */,
|
B563218E1BD65216006C9394 /* SaveResult.swift in Sources */,
|
||||||
B5E222261CA4E12600BA2E95 /* CSSynchronousDataTransaction.swift in Sources */,
|
B5E222261CA4E12600BA2E95 /* CSSynchronousDataTransaction.swift in Sources */,
|
||||||
B56321A21BD65216006C9394 /* ListObserver.swift in Sources */,
|
B56321A21BD65216006C9394 /* ListObserver.swift in Sources */,
|
||||||
|
B5215CAB1FA4810300139E3A /* QueryChainBuilder.swift in Sources */,
|
||||||
B563218A1BD65216006C9394 /* SynchronousDataTransaction.swift in Sources */,
|
B563218A1BD65216006C9394 /* SynchronousDataTransaction.swift in Sources */,
|
||||||
B52F744C1E9B8740005F3DAC /* CoreStoreSchema.swift in Sources */,
|
B52F744C1E9B8740005F3DAC /* CoreStoreSchema.swift in Sources */,
|
||||||
B5AEFAB71C9962AE00AD137F /* CoreStoreBridge.swift in Sources */,
|
B5AEFAB71C9962AE00AD137F /* CoreStoreBridge.swift in Sources */,
|
||||||
@@ -2427,6 +2580,8 @@
|
|||||||
B563219F1BD65216006C9394 /* ObjectMonitor.swift in Sources */,
|
B563219F1BD65216006C9394 /* ObjectMonitor.swift in Sources */,
|
||||||
B56321B61BD6521C006C9394 /* WeakObject.swift in Sources */,
|
B56321B61BD6521C006C9394 /* WeakObject.swift in Sources */,
|
||||||
B56923EA1EB827F5007C4DC9 /* InferredSchemaMappingProvider.swift in Sources */,
|
B56923EA1EB827F5007C4DC9 /* InferredSchemaMappingProvider.swift in Sources */,
|
||||||
|
B53B27611EE3B92E00E9B352 /* CoreStoreManagedObject.swift in Sources */,
|
||||||
|
B5215CA61FA47DFD00139E3A /* FetchChainBuilder.swift in Sources */,
|
||||||
B5D33A031E96012400C880DE /* Relationship.swift in Sources */,
|
B5D33A031E96012400C880DE /* Relationship.swift in Sources */,
|
||||||
B559CD4C1CAA8C6D00E4D58B /* CSStorageInterface.swift in Sources */,
|
B559CD4C1CAA8C6D00E4D58B /* CSStorageInterface.swift in Sources */,
|
||||||
B56923CB1EB82410007C4DC9 /* NSManagedObjectModel+Migration.swift in Sources */,
|
B56923CB1EB82410007C4DC9 /* NSManagedObjectModel+Migration.swift in Sources */,
|
||||||
@@ -2444,27 +2599,32 @@
|
|||||||
B56321B11BD6521C006C9394 /* NSManagedObjectContext+CoreStore.swift in Sources */,
|
B56321B11BD6521C006C9394 /* NSManagedObjectContext+CoreStore.swift in Sources */,
|
||||||
B563218D1BD65216006C9394 /* CoreStore+Transaction.swift in Sources */,
|
B563218D1BD65216006C9394 /* CoreStore+Transaction.swift in Sources */,
|
||||||
B546F96B1C9AF26D00D5AC55 /* CSInMemoryStore.swift in Sources */,
|
B546F96B1C9AF26D00D5AC55 /* CSInMemoryStore.swift in Sources */,
|
||||||
|
B5831B7C1F34ACBA00A9F647 /* Transformable.swift in Sources */,
|
||||||
B53FBA211CAB63FA00F0D40A /* NSFetchedResultsController+ObjectiveC.swift in Sources */,
|
B53FBA211CAB63FA00F0D40A /* NSFetchedResultsController+ObjectiveC.swift in Sources */,
|
||||||
B563218B1BD65216006C9394 /* UnsafeDataTransaction.swift in Sources */,
|
B563218B1BD65216006C9394 /* UnsafeDataTransaction.swift in Sources */,
|
||||||
B549F6601E569C7400FBAB2D /* QueryableAttributeType.swift in Sources */,
|
B549F6601E569C7400FBAB2D /* QueryableAttributeType.swift in Sources */,
|
||||||
B559CD461CAA8B6300E4D58B /* CSSetupResult.swift in Sources */,
|
B559CD461CAA8B6300E4D58B /* CSSetupResult.swift in Sources */,
|
||||||
B56321A61BD65216006C9394 /* MigrationType.swift in Sources */,
|
B56321A61BD65216006C9394 /* MigrationType.swift in Sources */,
|
||||||
|
B5CA2B141F81DBFE004B1936 /* DynamicKeyPath.swift in Sources */,
|
||||||
B5A991EE1E9DC2CE0091A2E3 /* VersionLock.swift in Sources */,
|
B5A991EE1E9DC2CE0091A2E3 /* VersionLock.swift in Sources */,
|
||||||
B5ECDBEF1CA6BF2000C7F112 /* CSFrom.swift in Sources */,
|
B5ECDBEF1CA6BF2000C7F112 /* CSFrom.swift in Sources */,
|
||||||
B52F743F1E9B8724005F3DAC /* DynamicSchema.swift in Sources */,
|
B52F743F1E9B8724005F3DAC /* DynamicSchema.swift in Sources */,
|
||||||
B56924011EB82976007C4DC9 /* CSLegacyXcodeDataModelSchema.swift in Sources */,
|
B5E8A72221C1015300EF006A /* CoreStoreObject+Observing.swift in Sources */,
|
||||||
|
B56924011EB82976007C4DC9 /* CSUnsafeDataModelSchema.swift in Sources */,
|
||||||
|
B5215CB01FA4812500139E3A /* SectionMonitorBuilder.swift in Sources */,
|
||||||
B56321B41BD6521C006C9394 /* NSManagedObjectContext+Transaction.swift in Sources */,
|
B56321B41BD6521C006C9394 /* NSManagedObjectContext+Transaction.swift in Sources */,
|
||||||
B56923EE1EB827F6007C4DC9 /* SchemaMappingProvider.swift in Sources */,
|
B56923EE1EB827F6007C4DC9 /* SchemaMappingProvider.swift in Sources */,
|
||||||
B56321861BD65216006C9394 /* CoreStoreLogger.swift in Sources */,
|
B56321861BD65216006C9394 /* CoreStoreLogger.swift in Sources */,
|
||||||
B53FBA071CAB300C00F0D40A /* CSMigrationType.swift in Sources */,
|
B53FBA071CAB300C00F0D40A /* CSMigrationType.swift in Sources */,
|
||||||
B56321841BD65216006C9394 /* DefaultLogger.swift in Sources */,
|
B56321841BD65216006C9394 /* DefaultLogger.swift in Sources */,
|
||||||
B5DBE2CF1C9914A900B5CEFA /* CSCoreStore.swift in Sources */,
|
B5DBE2CF1C9914A900B5CEFA /* CSCoreStore.swift in Sources */,
|
||||||
|
B5831B721F34AC3400A9F647 /* AttributeProtocol.swift in Sources */,
|
||||||
B546F95F1C9A12B800D5AC55 /* CSSQliteStore.swift in Sources */,
|
B546F95F1C9A12B800D5AC55 /* CSSQliteStore.swift in Sources */,
|
||||||
B5ECDC0E1CA8161B00C7F112 /* CSGroupBy.swift in Sources */,
|
B5ECDC0E1CA8161B00C7F112 /* CSGroupBy.swift in Sources */,
|
||||||
B5D339E91E9493A500C880DE /* Entity.swift in Sources */,
|
B5D339E91E9493A500C880DE /* Entity.swift in Sources */,
|
||||||
B56321A41BD65216006C9394 /* CoreStore+Migration.swift in Sources */,
|
B56321A41BD65216006C9394 /* CoreStore+Migration.swift in Sources */,
|
||||||
B56321A01BD65216006C9394 /* ObjectObserver.swift in Sources */,
|
B56321A01BD65216006C9394 /* ObjectObserver.swift in Sources */,
|
||||||
B56321951BD65216006C9394 /* ClauseTypes.swift in Sources */,
|
B56321951BD65216006C9394 /* TypeErasedClauses.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -2498,14 +2658,23 @@
|
|||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
@@ -2530,8 +2699,8 @@
|
|||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
INFOPLIST_FILE = Sources/Info.plist;
|
INFOPLIST_FILE = Sources/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
OTHER_SWIFT_FLAGS = "-D DEBUG";
|
OTHER_SWIFT_FLAGS = "-D DEBUG";
|
||||||
@@ -2539,11 +2708,13 @@
|
|||||||
PRODUCT_NAME = CoreStore;
|
PRODUCT_NAME = CoreStore;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
TVOS_DEPLOYMENT_TARGET = 9.0;
|
TVOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
VERSION_INFO_PREFIX = "";
|
VERSION_INFO_PREFIX = "";
|
||||||
WATCHOS_DEPLOYMENT_TARGET = 2.0;
|
WATCHOS_DEPLOYMENT_TARGET = 3.0;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -2556,14 +2727,23 @@
|
|||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
@@ -2583,19 +2763,21 @@
|
|||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
INFOPLIST_FILE = Sources/Info.plist;
|
INFOPLIST_FILE = Sources/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.johnestropia.CoreStore;
|
PRODUCT_BUNDLE_IDENTIFIER = com.johnestropia.CoreStore;
|
||||||
PRODUCT_NAME = CoreStore;
|
PRODUCT_NAME = CoreStore;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||||
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
TVOS_DEPLOYMENT_TARGET = 9.0;
|
TVOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
VERSION_INFO_PREFIX = "";
|
VERSION_INFO_PREFIX = "";
|
||||||
WATCHOS_DEPLOYMENT_TARGET = 2.0;
|
WATCHOS_DEPLOYMENT_TARGET = 3.0;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
@@ -2613,7 +2795,8 @@
|
|||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -2631,7 +2814,8 @@
|
|||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
@@ -2651,7 +2835,8 @@
|
|||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -2666,7 +2851,8 @@
|
|||||||
PRODUCT_NAME = CoreStoreTests;
|
PRODUCT_NAME = CoreStoreTests;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
@@ -2686,7 +2872,8 @@
|
|||||||
SDKROOT = appletvos;
|
SDKROOT = appletvos;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
TARGETED_DEVICE_FAMILY = 3;
|
TARGETED_DEVICE_FAMILY = 3;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
@@ -2707,7 +2894,8 @@
|
|||||||
SDKROOT = appletvos;
|
SDKROOT = appletvos;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
TARGETED_DEVICE_FAMILY = 3;
|
TARGETED_DEVICE_FAMILY = 3;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
@@ -2725,7 +2913,8 @@
|
|||||||
SDKROOT = appletvos;
|
SDKROOT = appletvos;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
TARGETED_DEVICE_FAMILY = 3;
|
TARGETED_DEVICE_FAMILY = 3;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
@@ -2743,7 +2932,8 @@
|
|||||||
PRODUCT_NAME = CoreStoreTests;
|
PRODUCT_NAME = CoreStoreTests;
|
||||||
SDKROOT = appletvos;
|
SDKROOT = appletvos;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
TARGETED_DEVICE_FAMILY = 3;
|
TARGETED_DEVICE_FAMILY = 3;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
@@ -2767,7 +2957,8 @@
|
|||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -2791,7 +2982,8 @@
|
|||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
@@ -2811,7 +3003,8 @@
|
|||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -2831,7 +3024,8 @@
|
|||||||
PRODUCT_NAME = CoreStoreTests;
|
PRODUCT_NAME = CoreStoreTests;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
@@ -2852,7 +3046,8 @@
|
|||||||
SDKROOT = watchos;
|
SDKROOT = watchos;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
TARGETED_DEVICE_FAMILY = 4;
|
TARGETED_DEVICE_FAMILY = 4;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
@@ -2875,7 +3070,8 @@
|
|||||||
SDKROOT = watchos;
|
SDKROOT = watchos;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.2;
|
||||||
TARGETED_DEVICE_FAMILY = 4;
|
TARGETED_DEVICE_FAMILY = 4;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>IDEDidComputeMac32BitWarning</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0800"
|
LastUpgradeVersion = "0930"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0800"
|
LastUpgradeVersion = "0930"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -89,6 +89,12 @@
|
|||||||
ReferencedContainer = "container:CoreStore.xcodeproj">
|
ReferencedContainer = "container:CoreStore.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</MacroExpansion>
|
</MacroExpansion>
|
||||||
|
<CommandLineArguments>
|
||||||
|
<CommandLineArgument
|
||||||
|
argument = "-com.apple.CoreData.SQLDebug 2"
|
||||||
|
isEnabled = "NO">
|
||||||
|
</CommandLineArgument>
|
||||||
|
</CommandLineArguments>
|
||||||
<AdditionalOptions>
|
<AdditionalOptions>
|
||||||
</AdditionalOptions>
|
</AdditionalOptions>
|
||||||
</LaunchAction>
|
</LaunchAction>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0800"
|
LastUpgradeVersion = "0930"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0800"
|
LastUpgradeVersion = "0930"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>IDEDidComputeMac32BitWarning</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict/>
|
||||||
|
</plist>
|
||||||
@@ -265,12 +265,12 @@
|
|||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 0700;
|
LastSwiftUpdateCheck = 0700;
|
||||||
LastUpgradeCheck = 0800;
|
LastUpgradeCheck = 0930;
|
||||||
ORGANIZATIONNAME = "John Rommel Estropia";
|
ORGANIZATIONNAME = "John Rommel Estropia";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
B54AAD481AF4D26E00848AE0 = {
|
B54AAD481AF4D26E00848AE0 = {
|
||||||
CreatedOnToolsVersion = 6.3;
|
CreatedOnToolsVersion = 6.3;
|
||||||
LastSwiftMigration = 0800;
|
LastSwiftMigration = 0900;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -371,14 +371,22 @@
|
|||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
@@ -402,11 +410,13 @@
|
|||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -418,14 +428,22 @@
|
|||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
@@ -442,9 +460,11 @@
|
|||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
@@ -454,11 +474,11 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
INFOPLIST_FILE = CoreStoreDemo/Info.plist;
|
INFOPLIST_FILE = CoreStoreDemo/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.johnestropia.corestore.demo;
|
PRODUCT_BUNDLE_IDENTIFIER = com.johnestropia.corestore.demo;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -467,12 +487,12 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
INFOPLIST_FILE = CoreStoreDemo/Info.plist;
|
INFOPLIST_FILE = CoreStoreDemo/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.johnestropia.corestore.demo;
|
PRODUCT_BUNDLE_IDENTIFIER = com.johnestropia.corestore.demo;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0800"
|
LastUpgradeVersion = "0930"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|||||||
@@ -3,12 +3,11 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/05/02.
|
// Created by John Rommel Estropia on 2015/05/02.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
import CoreStore
|
|
||||||
|
|
||||||
// MARK: - AppDelegate
|
// MARK: - AppDelegate
|
||||||
|
|
||||||
@@ -21,7 +20,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
|
|
||||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? = nil) -> Bool {
|
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? = nil) -> Bool {
|
||||||
|
|
||||||
application.statusBarStyle = .lightContent
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10112" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES">
|
||||||
|
<device id="retina4_7" orientation="portrait">
|
||||||
|
<adaptation id="fullscreen"/>
|
||||||
|
</device>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="iOS"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14283.14"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10083"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||||
@@ -12,10 +14,10 @@
|
|||||||
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
|
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" Copyright © 2015 John Rommel Estropia. All rights reserved." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" Copyright © 2018 John Rommel Estropia. All rights reserved." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
|
||||||
<rect key="frame" x="20" y="439" width="441" height="21"/>
|
<rect key="frame" x="20" y="439" width="440" height="21"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
<color key="textColor" red="0.92549019607843142" green="0.94117647058823528" blue="0.94509803921568625" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.90744441747665405" green="0.9265514612197876" blue="0.93116652965545654" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<imageView userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="CoreStoreIcon" translatesAutoresizingMaskIntoConstraints="NO" id="q8C-V6-gXH">
|
<imageView userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="CoreStoreIcon" translatesAutoresizingMaskIntoConstraints="NO" id="q8C-V6-gXH">
|
||||||
@@ -24,11 +26,11 @@
|
|||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CoreStore" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CoreStore" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
|
||||||
<rect key="frame" x="20" y="273" width="440" height="57.5"/>
|
<rect key="frame" x="20" y="273" width="440" height="57.5"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-UltraLight" family="Helvetica Neue" pointSize="50"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-UltraLight" family="Helvetica Neue" pointSize="50"/>
|
||||||
<color key="textColor" red="0.92549019607843142" green="0.94117647058823528" blue="0.94509803921568625" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.90744441747665405" green="0.9265514612197876" blue="0.93116652965545654" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" red="0.20392156862745098" green="0.28627450980392155" blue="0.36862745098039218" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="backgroundColor" red="0.15542715787887573" green="0.2203737199306488" blue="0.2959403395652771" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/>
|
<constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/>
|
<constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/>
|
||||||
|
|||||||
@@ -1,14 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12113" systemVersion="16C67" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="Ni8-QF-XHB">
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="Ni8-QF-XHB">
|
||||||
<device id="retina4_7" orientation="portrait">
|
<device id="retina4_7" orientation="portrait">
|
||||||
<adaptation id="fullscreen"/>
|
<adaptation id="fullscreen"/>
|
||||||
</device>
|
</device>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="iOS"/>
|
<deployment identifier="iOS"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12078"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
|
||||||
<capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
|
|
||||||
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
|
|
||||||
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
|
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<customFonts key="customFonts">
|
<customFonts key="customFonts">
|
||||||
@@ -78,14 +75,14 @@
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="8b8-lM-Krq">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="8b8-lM-Krq">
|
||||||
<rect key="frame" x="15" y="13" width="28.5" height="19"/>
|
<rect key="frame" x="16" y="13" width="28.5" height="19"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="16"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="16"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Subtitle" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="hR1-Zb-BOk">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Subtitle" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="hR1-Zb-BOk">
|
||||||
<rect key="frame" x="308" y="13" width="52" height="19"/>
|
<rect key="frame" x="307" y="13" width="52" height="19"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="16"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="16"/>
|
||||||
<color key="textColor" red="0.55686274509803924" green="0.55686274509803924" blue="0.57647058823529407" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.55686274509803924" green="0.55686274509803924" blue="0.57647058823529407" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -136,7 +133,7 @@
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OQf-Bd-Zze">
|
<button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OQf-Bd-Zze">
|
||||||
<rect key="frame" x="295" y="8" width="72" height="27.5"/>
|
<rect key="frame" x="288" y="11" width="72" height="22"/>
|
||||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
||||||
<inset key="contentEdgeInsets" minX="7" minY="0.0" maxX="7" maxY="0.0"/>
|
<inset key="contentEdgeInsets" minX="7" minY="0.0" maxX="7" maxY="0.0"/>
|
||||||
<state key="normal" title="mutate!"/>
|
<state key="normal" title="mutate!"/>
|
||||||
@@ -145,7 +142,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VZk-6K-4ut">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VZk-6K-4ut">
|
||||||
<rect key="frame" x="15" y="8" width="270" height="27.5"/>
|
<rect key="frame" x="22" y="11" width="256" height="22"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Thin" family="Helvetica Neue" pointSize="17"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Thin" family="Helvetica Neue" pointSize="17"/>
|
||||||
<color key="textColor" red="0.15542715787887573" green="0.2203737199306488" blue="0.2959403395652771" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.15542715787887573" green="0.2203737199306488" blue="0.2959403395652771" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -275,18 +272,18 @@
|
|||||||
<rect key="frame" x="0.0" y="35" width="375" height="50"/>
|
<rect key="frame" x="0.0" y="35" width="375" height="50"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="AXm-KE-45G" id="9te-Wx-hkf">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="AXm-KE-45G" id="9te-Wx-hkf">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="342" height="49.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="341" height="49.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Accounts" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Q3n-Df-v1t">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Accounts" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Q3n-Df-v1t">
|
||||||
<rect key="frame" x="15" y="6" width="82" height="24"/>
|
<rect key="frame" x="16" y="6" width="82" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Setting up multiple persistent store configurations" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Hbn-cf-Y7m">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Setting up multiple persistent store configurations" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Hbn-cf-Y7m">
|
||||||
<rect key="frame" x="15" y="30" width="263.5" height="13.5"/>
|
<rect key="frame" x="16" y="30" width="263.5" height="13.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -302,18 +299,18 @@
|
|||||||
<rect key="frame" x="0.0" y="85" width="375" height="50"/>
|
<rect key="frame" x="0.0" y="85" width="375" height="50"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="fsb-zw-8Ii" id="Upm-AO-Fw3">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="fsb-zw-8Ii" id="Upm-AO-Fw3">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="342" height="49.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="341" height="49.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Colors" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="vpt-cT-gMo">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Colors" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="vpt-cT-gMo">
|
||||||
<rect key="frame" x="15" y="6" width="56" height="24"/>
|
<rect key="frame" x="16" y="6" width="56" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Observing list changes and single object changes" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ou9-TZ-8bf">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Observing list changes and single object changes" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ou9-TZ-8bf">
|
||||||
<rect key="frame" x="15" y="30" width="260.5" height="13.5"/>
|
<rect key="frame" x="16" y="30" width="260.5" height="13.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -329,18 +326,18 @@
|
|||||||
<rect key="frame" x="0.0" y="135" width="375" height="50"/>
|
<rect key="frame" x="0.0" y="135" width="375" height="50"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="ekW-PJ-mbo" id="CYq-mg-PVS">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="ekW-PJ-mbo" id="CYq-mg-PVS">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="342" height="49.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="341" height="49.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Placemarks" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="UbU-Kd-yrY">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Placemarks" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="UbU-Kd-yrY">
|
||||||
<rect key="frame" x="15" y="6" width="100.5" height="24"/>
|
<rect key="frame" x="16" y="6" width="100.5" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Making changes with transactions" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="uP1-Jc-o9v">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Making changes with transactions" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="uP1-Jc-o9v">
|
||||||
<rect key="frame" x="15" y="30" width="179" height="13.5"/>
|
<rect key="frame" x="16" y="30" width="179" height="13.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -356,18 +353,18 @@
|
|||||||
<rect key="frame" x="0.0" y="185" width="375" height="50"/>
|
<rect key="frame" x="0.0" y="185" width="375" height="50"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="ph1-8z-C1m" id="nNz-rd-ksg">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="ph1-8z-C1m" id="nNz-rd-ksg">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="342" height="49.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="341" height="49.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Time Zones" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="C8Y-0y-lEG">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Time Zones" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="C8Y-0y-lEG">
|
||||||
<rect key="frame" x="15" y="6" width="101.5" height="24"/>
|
<rect key="frame" x="16" y="6" width="101.5" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Fetching objects and raw values" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="jZw-qE-0ws">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Fetching objects and raw values" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="jZw-qE-0ws">
|
||||||
<rect key="frame" x="15" y="30" width="168.5" height="13.5"/>
|
<rect key="frame" x="16" y="30" width="168.5" height="13.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -383,18 +380,18 @@
|
|||||||
<rect key="frame" x="0.0" y="235" width="375" height="50"/>
|
<rect key="frame" x="0.0" y="235" width="375" height="50"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="wyK-rk-3tI" id="fLd-KK-QcW">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="wyK-rk-3tI" id="fLd-KK-QcW">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="342" height="49.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="341" height="49.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Logger" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ZfY-Aq-Ykq">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Logger" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ZfY-Aq-Ykq">
|
||||||
<rect key="frame" x="15" y="6" width="61" height="24"/>
|
<rect key="frame" x="16" y="6" width="61" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Implementing a custom logger" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="QzD-9b-k1j">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Implementing a custom logger" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="QzD-9b-k1j">
|
||||||
<rect key="frame" x="15" y="30" width="159" height="13.5"/>
|
<rect key="frame" x="16" y="30" width="159" height="13.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -410,18 +407,18 @@
|
|||||||
<rect key="frame" x="0.0" y="285" width="375" height="50"/>
|
<rect key="frame" x="0.0" y="285" width="375" height="50"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="xTM-Cf-0if" id="DfO-BW-krd">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="xTM-Cf-0if" id="DfO-BW-krd">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="342" height="49.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="341" height="49.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Evolution" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="hSG-mG-YBw">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Evolution" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="hSG-mG-YBw">
|
||||||
<rect key="frame" x="15" y="6" width="78.5" height="24"/>
|
<rect key="frame" x="16" y="6" width="78.5" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Migrating and de-migrating stores" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="X9P-TQ-LYh">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Migrating and de-migrating stores" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="X9P-TQ-LYh">
|
||||||
<rect key="frame" x="15" y="30" width="179.5" height="13.5"/>
|
<rect key="frame" x="16" y="30" width="179.5" height="13.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -459,8 +456,8 @@
|
|||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="301.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="301.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<view contentMode="scaleToFill" verticalCompressionResistancePriority="250" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="NhC-oM-bkd">
|
<view contentMode="scaleToFill" verticalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="NhC-oM-bkd">
|
||||||
<rect key="frame" x="20" y="69.5" width="552" height="36.5"/>
|
<rect key="frame" x="16" y="69.5" width="343" height="70"/>
|
||||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" relation="greaterThanOrEqual" id="TIX-qi-B34"/>
|
<constraint firstAttribute="height" relation="greaterThanOrEqual" id="TIX-qi-B34"/>
|
||||||
@@ -511,8 +508,8 @@
|
|||||||
<action selector="brightnessSliderValueDidChange:" destination="dX3-kR-CYC" eventType="valueChanged" id="F09-EP-2iD"/>
|
<action selector="brightnessSliderValueDidChange:" destination="dX3-kR-CYC" eventType="valueChanged" id="F09-EP-2iD"/>
|
||||||
</connections>
|
</connections>
|
||||||
</slider>
|
</slider>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="p4O-tf-dgt">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="p4O-tf-dgt">
|
||||||
<rect key="frame" x="20" y="49" width="552" height="20.5"/>
|
<rect key="frame" x="16" y="49" width="343" height="20.5"/>
|
||||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
||||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -623,7 +620,7 @@
|
|||||||
<tabBarItem key="tabBarItem" title="Demo" image="second" id="3iQ-I2-4LW"/>
|
<tabBarItem key="tabBarItem" title="Demo" image="second" id="3iQ-I2-4LW"/>
|
||||||
<toolbarItems/>
|
<toolbarItems/>
|
||||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="00L-5k-Eno">
|
<navigationBar key="navigationBar" contentMode="scaleToFill" id="00L-5k-Eno">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
<rect key="frame" x="0.0" y="20" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<color key="tintColor" red="0.90744441747665405" green="0.9265514612197876" blue="0.93116652965545654" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="tintColor" red="0.90744441747665405" green="0.9265514612197876" blue="0.93116652965545654" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<color key="barTintColor" red="0.15542715787887573" green="0.2203737199306488" blue="0.2959403395652771" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="barTintColor" red="0.15542715787887573" green="0.2203737199306488" blue="0.2959403395652771" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -653,18 +650,18 @@
|
|||||||
<rect key="frame" x="0.0" y="22" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="22" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="G3X-70-BCD" id="aT8-nz-i5l">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="G3X-70-BCD" id="aT8-nz-i5l">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="342" height="43.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="341" height="43.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uQX-PI-UWF">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uQX-PI-UWF">
|
||||||
<rect key="frame" x="8" y="8" width="27" height="27"/>
|
<rect key="frame" x="16" y="11" width="22" height="22"/>
|
||||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" secondItem="uQX-PI-UWF" secondAttribute="height" multiplier="1:1" id="9qA-iN-Neb"/>
|
<constraint firstAttribute="width" secondItem="uQX-PI-UWF" secondAttribute="height" multiplier="1:1" id="9qA-iN-Neb"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HJC-5w-lIN">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HJC-5w-lIN">
|
||||||
<rect key="frame" x="45" y="8" width="34.5" height="27"/>
|
<rect key="frame" x="48" y="11" width="34.5" height="22"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="14"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="14"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -713,18 +710,18 @@
|
|||||||
<rect key="frame" x="0.0" y="22" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="22" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="zSO-3e-OVq" id="cHA-by-n4b">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="zSO-3e-OVq" id="cHA-by-n4b">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="342" height="43.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="341" height="43.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5uq-Yi-XwH">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5uq-Yi-XwH">
|
||||||
<rect key="frame" x="8" y="8" width="27" height="27"/>
|
<rect key="frame" x="16" y="11" width="22" height="22"/>
|
||||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" secondItem="5uq-Yi-XwH" secondAttribute="height" multiplier="1:1" id="oOe-HC-VyN"/>
|
<constraint firstAttribute="width" secondItem="5uq-Yi-XwH" secondAttribute="height" multiplier="1:1" id="oOe-HC-VyN"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Zyu-PC-WmO">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Zyu-PC-WmO">
|
||||||
<rect key="frame" x="45" y="8" width="34.5" height="27"/>
|
<rect key="frame" x="48" y="11" width="34.5" height="22"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="14"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="14"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -767,7 +764,7 @@
|
|||||||
<extendedEdge key="edgesForExtendedLayout" bottom="YES"/>
|
<extendedEdge key="edgesForExtendedLayout" bottom="YES"/>
|
||||||
<toolbarItems/>
|
<toolbarItems/>
|
||||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="6XA-6M-yvZ">
|
<navigationBar key="navigationBar" contentMode="scaleToFill" id="6XA-6M-yvZ">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<color key="tintColor" red="0.68773996829986572" green="0.71417498588562012" blue="0.73246318101882935" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="tintColor" red="0.68773996829986572" green="0.71417498588562012" blue="0.73246318101882935" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<color key="barTintColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="barTintColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -794,11 +791,11 @@
|
|||||||
<viewControllerLayoutGuide type="bottom" id="RZg-hi-T8O"/>
|
<viewControllerLayoutGuide type="bottom" id="RZg-hi-T8O"/>
|
||||||
</layoutGuides>
|
</layoutGuides>
|
||||||
<view key="view" contentMode="scaleToFill" id="k4s-iL-Krh">
|
<view key="view" contentMode="scaleToFill" id="k4s-iL-Krh">
|
||||||
<rect key="frame" x="0.0" y="64" width="375" height="603"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="603"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<mapView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" ambiguous="YES" mapType="standard" translatesAutoresizingMaskIntoConstraints="NO" id="V2U-0R-Ts0">
|
<mapView verifyAmbiguity="ignoreSizes" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" mapType="standard" translatesAutoresizingMaskIntoConstraints="NO" id="V2U-0R-Ts0">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="536"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="603"/>
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="delegate" destination="jPl-fH-NlD" id="Sjn-YC-haS"/>
|
<outlet property="delegate" destination="jPl-fH-NlD" id="Sjn-YC-haS"/>
|
||||||
</connections>
|
</connections>
|
||||||
@@ -806,7 +803,7 @@
|
|||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstItem="RZg-hi-T8O" firstAttribute="top" secondItem="V2U-0R-Ts0" secondAttribute="bottom" id="GcS-Jz-Wcm"/>
|
<constraint firstItem="RZg-hi-T8O" firstAttribute="top" secondItem="V2U-0R-Ts0" secondAttribute="bottom" id="N9r-9J-68d"/>
|
||||||
<constraint firstItem="V2U-0R-Ts0" firstAttribute="top" secondItem="k4s-iL-Krh" secondAttribute="top" id="S5Z-Da-V6J"/>
|
<constraint firstItem="V2U-0R-Ts0" firstAttribute="top" secondItem="k4s-iL-Krh" secondAttribute="top" id="S5Z-Da-V6J"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="V2U-0R-Ts0" secondAttribute="trailing" id="YPc-RK-5ib"/>
|
<constraint firstAttribute="trailing" secondItem="V2U-0R-Ts0" secondAttribute="trailing" id="YPc-RK-5ib"/>
|
||||||
<constraint firstItem="V2U-0R-Ts0" firstAttribute="leading" secondItem="k4s-iL-Krh" secondAttribute="leading" id="hk5-Rz-FyU"/>
|
<constraint firstItem="V2U-0R-Ts0" firstAttribute="leading" secondItem="k4s-iL-Krh" secondAttribute="leading" id="hk5-Rz-FyU"/>
|
||||||
@@ -820,7 +817,7 @@
|
|||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="YnG-TD-zxQ" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="YnG-TD-zxQ" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="3694" y="2020"/>
|
<point key="canvasLocation" x="3693.5" y="2019.5"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Logger-->
|
<!--Logger-->
|
||||||
<scene sceneID="n7W-0g-bbY">
|
<scene sceneID="n7W-0g-bbY">
|
||||||
@@ -888,7 +885,7 @@
|
|||||||
<extendedEdge key="edgesForExtendedLayout" bottom="YES"/>
|
<extendedEdge key="edgesForExtendedLayout" bottom="YES"/>
|
||||||
<toolbarItems/>
|
<toolbarItems/>
|
||||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="wJo-mp-1pS">
|
<navigationBar key="navigationBar" contentMode="scaleToFill" id="wJo-mp-1pS">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<color key="tintColor" red="0.68773996829986572" green="0.71417498588562012" blue="0.73246318101882935" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="tintColor" red="0.68773996829986572" green="0.71417498588562012" blue="0.73246318101882935" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<color key="barTintColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="barTintColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -927,7 +924,7 @@
|
|||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="bordered" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="YVj-dA-fyV">
|
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="bordered" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="YVj-dA-fyV">
|
||||||
<rect key="frame" x="20" y="26" width="560" height="29"/>
|
<rect key="frame" x="20" y="26" width="335" height="29"/>
|
||||||
<segments>
|
<segments>
|
||||||
<segment title="Fetch"/>
|
<segment title="Fetch"/>
|
||||||
<segment title="Query"/>
|
<segment title="Query"/>
|
||||||
@@ -1008,14 +1005,14 @@
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="name" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="RgX-yK-1L2">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="name" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="RgX-yK-1L2">
|
||||||
<rect key="frame" x="15" y="11" width="48.5" height="24"/>
|
<rect key="frame" x="16" y="11" width="48.5" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="offset" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="QZ4-A2-x4h">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="offset" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="QZ4-A2-x4h">
|
||||||
<rect key="frame" x="15" y="35" width="31" height="13.5"/>
|
<rect key="frame" x="16" y="35" width="31" height="13.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -1054,14 +1051,14 @@
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="name" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Syt-QJ-KXg">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="name" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Syt-QJ-KXg">
|
||||||
<rect key="frame" x="15" y="11" width="48.5" height="24"/>
|
<rect key="frame" x="16" y="11" width="48.5" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="offset" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="yHS-dP-IKS">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="offset" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="yHS-dP-IKS">
|
||||||
<rect key="frame" x="15" y="35" width="31" height="13.5"/>
|
<rect key="frame" x="16" y="35" width="31" height="13.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
|||||||
@@ -1,36 +1,25 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<model userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="10169.1" systemVersion="15D21" minimumToolsVersion="Automatic">
|
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="12141" systemVersion="16F73" minimumToolsVersion="Xcode 7.3" sourceLanguage="Objective-C" userDefinedModelVersionIdentifier="">
|
||||||
<entity name="Palette" representedClassName="CoreStoreDemo.Palette">
|
|
||||||
<attribute name="brightness" optional="YES" attributeType="Float" defaultValueString="0.0" syncable="YES"/>
|
|
||||||
<attribute name="colorName" optional="YES" transient="YES" attributeType="String" syncable="YES"/>
|
|
||||||
<attribute name="hue" optional="YES" attributeType="Integer 32" defaultValueString="0.0" syncable="YES"/>
|
|
||||||
<attribute name="saturation" optional="YES" attributeType="Float" defaultValueString="0.0" syncable="YES"/>
|
|
||||||
<userInfo/>
|
|
||||||
</entity>
|
|
||||||
<entity name="Place" representedClassName="CoreStoreDemo.Place" syncable="YES">
|
<entity name="Place" representedClassName="CoreStoreDemo.Place" syncable="YES">
|
||||||
<attribute name="latitude" optional="YES" attributeType="Double" defaultValueString="0.0" syncable="YES"/>
|
<attribute name="latitude" optional="YES" attributeType="Double" defaultValueString="0.0" usesScalarValueType="NO" syncable="YES"/>
|
||||||
<attribute name="longitude" optional="YES" attributeType="Double" defaultValueString="0.0" syncable="YES"/>
|
<attribute name="longitude" optional="YES" attributeType="Double" defaultValueString="0.0" usesScalarValueType="NO" syncable="YES"/>
|
||||||
<attribute name="subtitle" optional="YES" attributeType="String" syncable="YES"/>
|
<attribute name="subtitle" optional="YES" attributeType="String" syncable="YES"/>
|
||||||
<attribute name="title" optional="YES" attributeType="String" syncable="YES"/>
|
<attribute name="title" optional="YES" attributeType="String" syncable="YES"/>
|
||||||
</entity>
|
</entity>
|
||||||
<entity name="TimeZone" representedClassName="CoreStoreDemo.TimeZone" syncable="YES">
|
<entity name="TimeZone" representedClassName="CoreStoreDemo.TimeZone" syncable="YES">
|
||||||
<attribute name="abbreviation" optional="YES" attributeType="String" syncable="YES"/>
|
<attribute name="abbreviation" optional="YES" attributeType="String" syncable="YES"/>
|
||||||
<attribute name="daylightSavingTimeOffset" optional="YES" attributeType="Double" defaultValueString="0.0" syncable="YES"/>
|
<attribute name="daylightSavingTimeOffset" optional="YES" attributeType="Double" defaultValueString="0.0" usesScalarValueType="NO" syncable="YES"/>
|
||||||
<attribute name="hasDaylightSavingTime" optional="YES" attributeType="Boolean" syncable="YES"/>
|
<attribute name="hasDaylightSavingTime" optional="YES" attributeType="Boolean" usesScalarValueType="NO" syncable="YES"/>
|
||||||
<attribute name="name" optional="YES" attributeType="String" syncable="YES"/>
|
<attribute name="name" optional="YES" attributeType="String" syncable="YES"/>
|
||||||
<attribute name="secondsFromGMT" optional="YES" attributeType="Integer 32" defaultValueString="0.0" syncable="YES"/>
|
<attribute name="secondsFromGMT" optional="YES" attributeType="Integer 32" defaultValueString="0.0" usesScalarValueType="NO" syncable="YES"/>
|
||||||
</entity>
|
</entity>
|
||||||
<configuration name="FetchingAndQueryingDemo">
|
<configuration name="FetchingAndQueryingDemo">
|
||||||
<memberEntity name="TimeZone"/>
|
<memberEntity name="TimeZone"/>
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration name="ObservingDemo">
|
|
||||||
<memberEntity name="Palette"/>
|
|
||||||
</configuration>
|
|
||||||
<configuration name="TransactionsDemo">
|
<configuration name="TransactionsDemo">
|
||||||
<memberEntity name="Place"/>
|
<memberEntity name="Place"/>
|
||||||
</configuration>
|
</configuration>
|
||||||
<elements>
|
<elements>
|
||||||
<element name="Palette" positionX="261" positionY="189" width="128" height="105"/>
|
|
||||||
<element name="Place" positionX="261" positionY="225" width="128" height="105"/>
|
<element name="Place" positionX="261" positionY="225" width="128" height="105"/>
|
||||||
<element name="TimeZone" positionX="297" positionY="270" width="128" height="120"/>
|
<element name="TimeZone" positionX="297" positionY="270" width="128" height="120"/>
|
||||||
</elements>
|
</elements>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/06/12.
|
// Created by John Rommel Estropia on 2015/06/12.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
@@ -25,7 +25,7 @@ private struct Static {
|
|||||||
_ = try? dataStack.perform(
|
_ = try? dataStack.perform(
|
||||||
synchronous: { (transaction) in
|
synchronous: { (transaction) in
|
||||||
|
|
||||||
transaction.deleteAll(From<TimeZone>())
|
try transaction.deleteAll(From<TimeZone>())
|
||||||
|
|
||||||
for name in NSTimeZone.knownTimeZoneNames {
|
for name in NSTimeZone.knownTimeZoneNames {
|
||||||
|
|
||||||
@@ -164,67 +164,80 @@ class FetchingAndQueryingDemoViewController: UIViewController, UITableViewDataSo
|
|||||||
title: "All Time Zones",
|
title: "All Time Zones",
|
||||||
fetch: { () -> [TimeZone] in
|
fetch: { () -> [TimeZone] in
|
||||||
|
|
||||||
return Static.timeZonesStack.fetchAll(
|
return try! Static.timeZonesStack.fetchAll(
|
||||||
From<TimeZone>(),
|
From<TimeZone>()
|
||||||
OrderBy(.ascending(#keyPath(TimeZone.name)))
|
.orderBy(.ascending(\.name))
|
||||||
)!
|
)
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
title: "Time Zones in Asia",
|
title: "Time Zones in Asia",
|
||||||
fetch: { () -> [TimeZone] in
|
fetch: { () -> [TimeZone] in
|
||||||
|
|
||||||
return Static.timeZonesStack.fetchAll(
|
return try! Static.timeZonesStack.fetchAll(
|
||||||
From<TimeZone>(),
|
From<TimeZone>()
|
||||||
Where("%K BEGINSWITH[c] %@", #keyPath(TimeZone.name), "Asia"),
|
.where(
|
||||||
OrderBy(.ascending(#keyPath(TimeZone.secondsFromGMT)))
|
format: "%K BEGINSWITH[c] %@",
|
||||||
)!
|
#keyPath(TimeZone.name),
|
||||||
|
"Asia"
|
||||||
|
)
|
||||||
|
.orderBy(.ascending(\.secondsFromGMT))
|
||||||
|
)
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
title: "Time Zones in America and Europe",
|
title: "Time Zones in America and Europe",
|
||||||
fetch: { () -> [TimeZone] in
|
fetch: { () -> [TimeZone] in
|
||||||
|
|
||||||
return Static.timeZonesStack.fetchAll(
|
return try! Static.timeZonesStack.fetchAll(
|
||||||
From<TimeZone>(),
|
From<TimeZone>()
|
||||||
Where("%K BEGINSWITH[c] %@", #keyPath(TimeZone.name), "America")
|
.where(
|
||||||
|| Where("%K BEGINSWITH[c] %@", #keyPath(TimeZone.name), "Europe"),
|
format: "%K BEGINSWITH[c] %@ OR %K BEGINSWITH[c] %@",
|
||||||
OrderBy(.ascending(#keyPath(TimeZone.secondsFromGMT)))
|
#keyPath(TimeZone.name),
|
||||||
)!
|
"America",
|
||||||
|
#keyPath(TimeZone.name),
|
||||||
|
"Europe"
|
||||||
|
)
|
||||||
|
.orderBy(.ascending(\.secondsFromGMT))
|
||||||
|
)
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
title: "All Time Zones Except America",
|
title: "All Time Zones Except America",
|
||||||
fetch: { () -> [TimeZone] in
|
fetch: { () -> [TimeZone] in
|
||||||
|
|
||||||
return Static.timeZonesStack.fetchAll(
|
return try! Static.timeZonesStack.fetchAll(
|
||||||
From<TimeZone>(),
|
From<TimeZone>()
|
||||||
!Where("%K BEGINSWITH[c] %@", #keyPath(TimeZone.name), "America"),
|
.where(
|
||||||
OrderBy(.ascending(#keyPath(TimeZone.secondsFromGMT)))
|
format: "%K BEGINSWITH[c] %@",
|
||||||
)!
|
#keyPath(TimeZone.name),
|
||||||
|
"America"
|
||||||
|
)
|
||||||
|
.orderBy(.ascending(\.secondsFromGMT))
|
||||||
|
)
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
title: "Time Zones with Summer Time",
|
title: "Time Zones with Summer Time",
|
||||||
fetch: { () -> [TimeZone] in
|
fetch: { () -> [TimeZone] in
|
||||||
|
|
||||||
return Static.timeZonesStack.fetchAll(
|
return try! Static.timeZonesStack.fetchAll(
|
||||||
From<TimeZone>(),
|
From<TimeZone>()
|
||||||
Where("hasDaylightSavingTime", isEqualTo: true),
|
.where(\.hasDaylightSavingTime == true)
|
||||||
OrderBy(.ascending(#keyPath(TimeZone.name)))
|
.orderBy(.ascending(\.name))
|
||||||
)!
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
private let queryingItems = [
|
private let queryingItems: [(title: String, query: () -> Any)] = [
|
||||||
(
|
(
|
||||||
title: "Number of Time Zones",
|
title: "Number of Time Zones",
|
||||||
query: { () -> Any in
|
query: { () -> Any in
|
||||||
|
|
||||||
return Static.timeZonesStack.queryValue(
|
return try! Static.timeZonesStack.queryValue(
|
||||||
From<TimeZone>(),
|
From<TimeZone>()
|
||||||
Select<NSNumber>(.count(#keyPath(TimeZone.name)))
|
.select(NSNumber.self, .count(\.name))
|
||||||
)!
|
)!
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
@@ -232,10 +245,10 @@ class FetchingAndQueryingDemoViewController: UIViewController, UITableViewDataSo
|
|||||||
title: "Abbreviation For Tokyo's Time Zone",
|
title: "Abbreviation For Tokyo's Time Zone",
|
||||||
query: { () -> Any in
|
query: { () -> Any in
|
||||||
|
|
||||||
return Static.timeZonesStack.queryValue(
|
return try! Static.timeZonesStack.queryValue(
|
||||||
From<TimeZone>(),
|
From<TimeZone>()
|
||||||
Select<String>(#keyPath(TimeZone.abbreviation)),
|
.select(String.self, .attribute(\.abbreviation))
|
||||||
Where("%K ENDSWITH[c] %@", #keyPath(TimeZone.name), "Tokyo")
|
.where(format: "%K ENDSWITH[c] %@", #keyPath(TimeZone.name), "Tokyo")
|
||||||
)!
|
)!
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
@@ -243,38 +256,53 @@ class FetchingAndQueryingDemoViewController: UIViewController, UITableViewDataSo
|
|||||||
title: "All Abbreviations",
|
title: "All Abbreviations",
|
||||||
query: { () -> Any in
|
query: { () -> Any in
|
||||||
|
|
||||||
return Static.timeZonesStack.queryAttributes(
|
return try! Static.timeZonesStack.queryAttributes(
|
||||||
From<TimeZone>(),
|
From<TimeZone>()
|
||||||
Select<NSDictionary>(#keyPath(TimeZone.name), #keyPath(TimeZone.abbreviation)),
|
.select(
|
||||||
OrderBy(.ascending(#keyPath(TimeZone.name)))
|
NSDictionary.self,
|
||||||
)!
|
.attribute(\.name),
|
||||||
|
.attribute(\.abbreviation)
|
||||||
|
)
|
||||||
|
.orderBy(.ascending(\.name))
|
||||||
|
)
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
title: "Number of Countries per Time Zone",
|
title: "Number of Countries per Time Zone",
|
||||||
query: { () -> Any in
|
query: { () -> Any in
|
||||||
|
|
||||||
return Static.timeZonesStack.queryAttributes(
|
return try! Static.timeZonesStack.queryAttributes(
|
||||||
From<TimeZone>(),
|
From<TimeZone>()
|
||||||
Select<NSDictionary>(.count(#keyPath(TimeZone.abbreviation)), #keyPath(TimeZone.abbreviation)),
|
.select(
|
||||||
GroupBy(#keyPath(TimeZone.abbreviation)),
|
NSDictionary.self,
|
||||||
OrderBy(.ascending(#keyPath(TimeZone.secondsFromGMT)), .ascending(#keyPath(TimeZone.name)))
|
.count(\.abbreviation),
|
||||||
)!
|
.attribute(\.abbreviation)
|
||||||
|
)
|
||||||
|
.groupBy(\.abbreviation)
|
||||||
|
.orderBy(
|
||||||
|
.ascending(\.secondsFromGMT),
|
||||||
|
.ascending(\.name)
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
title: "Number of Countries with Summer Time",
|
title: "Number of Countries with Summer Time",
|
||||||
query: { () -> Any in
|
query: { () -> Any in
|
||||||
|
|
||||||
return Static.timeZonesStack.queryAttributes(
|
return try! Static.timeZonesStack.queryAttributes(
|
||||||
From<TimeZone>(),
|
From<TimeZone>()
|
||||||
Select<NSDictionary>(
|
.select(
|
||||||
.count(#keyPath(TimeZone.hasDaylightSavingTime), as: "numberOfCountries"),
|
NSDictionary.self,
|
||||||
#keyPath(TimeZone.hasDaylightSavingTime)
|
.count(\.hasDaylightSavingTime, as: "numberOfCountries"),
|
||||||
),
|
.attribute(\.hasDaylightSavingTime)
|
||||||
GroupBy(#keyPath(TimeZone.hasDaylightSavingTime)),
|
)
|
||||||
OrderBy(.descending(#keyPath(TimeZone.hasDaylightSavingTime)))
|
.groupBy(\.hasDaylightSavingTime)
|
||||||
)!
|
.orderBy(
|
||||||
|
.descending(\.hasDaylightSavingTime),
|
||||||
|
.ascending(\.name)
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/06/17.
|
// Created by John Rommel Estropia on 2015/06/17.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/06/17.
|
// Created by John Rommel Estropia on 2015/06/17.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/06/15.
|
// Created by John Rommel Estropia on 2015/06/15.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|||||||
@@ -1,5 +1,15 @@
|
|||||||
{
|
{
|
||||||
"images" : [
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"size" : "20x20",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"size" : "20x20",
|
||||||
|
"scale" : "3x"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"idiom" : "iphone",
|
"idiom" : "iphone",
|
||||||
"size" : "29x29",
|
"size" : "29x29",
|
||||||
@@ -32,6 +42,36 @@
|
|||||||
"filename" : "Icon-60@3x-1.png",
|
"filename" : "Icon-60@3x-1.png",
|
||||||
"scale" : "3x"
|
"scale" : "3x"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"size" : "20x20",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"size" : "20x20",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"size" : "29x29",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"size" : "29x29",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"size" : "40x40",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"size" : "40x40",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"size" : "76x76",
|
"size" : "76x76",
|
||||||
"idiom" : "ipad",
|
"idiom" : "ipad",
|
||||||
@@ -44,6 +84,21 @@
|
|||||||
"filename" : "Icon-76@2x.png",
|
"filename" : "Icon-76@2x.png",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"size" : "83.5x83.5",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ios-marketing",
|
||||||
|
"size" : "1024x1024",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "car",
|
||||||
|
"size" : "60x60",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"size" : "60x60",
|
"size" : "60x60",
|
||||||
"idiom" : "car",
|
"idiom" : "car",
|
||||||
|
|||||||
@@ -17,11 +17,11 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.0.1</string>
|
<string>5.1.0</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1</string>
|
<string>4</string>
|
||||||
<key>LSRequiresIPhoneOS</key>
|
<key>LSRequiresIPhoneOS</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>UILaunchStoryboardName</key>
|
<key>UILaunchStoryboardName</key>
|
||||||
|
|||||||
@@ -3,14 +3,14 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/05/02.
|
// Created by John Rommel Estropia on 2015/05/02.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import CoreStore
|
import CoreStore
|
||||||
|
|
||||||
|
|
||||||
private struct Static {
|
struct ColorsDemo {
|
||||||
|
|
||||||
enum Filter: String {
|
enum Filter: String {
|
||||||
|
|
||||||
@@ -28,13 +28,13 @@ private struct Static {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func whereClause() -> Where {
|
func whereClause() -> Where<Palette> {
|
||||||
|
|
||||||
switch self {
|
switch self {
|
||||||
|
|
||||||
case .all: return Where(true)
|
case .all: return .init()
|
||||||
case .light: return Where("%K >= %@", #keyPath(Palette.brightness), 0.9)
|
case .light: return (\Palette.brightness >= 0.9)
|
||||||
case .dark: return Where("%K <= %@", #keyPath(Palette.brightness), 0.4)
|
case .dark: return (\Palette.brightness <= 0.4)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -45,25 +45,38 @@ private struct Static {
|
|||||||
|
|
||||||
self.palettes.refetch(
|
self.palettes.refetch(
|
||||||
self.filter.whereClause(),
|
self.filter.whereClause(),
|
||||||
OrderBy(.ascending(#keyPath(Palette.hue)))
|
OrderBy<Palette>(.ascending(\.hue))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static let stack: DataStack = {
|
||||||
|
|
||||||
|
return DataStack(
|
||||||
|
CoreStoreSchema(
|
||||||
|
modelVersion: "ColorsDemo",
|
||||||
|
entities: [
|
||||||
|
Entity<Palette>("Palette"),
|
||||||
|
],
|
||||||
|
versionLock: [
|
||||||
|
"Palette": [0x8c25aa53c7c90a28, 0xa243a34d25f1a3a7, 0x56565b6935b6055a, 0x4f988bb257bf274f]
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}()
|
||||||
|
|
||||||
static let palettes: ListMonitor<Palette> = {
|
static let palettes: ListMonitor<Palette> = {
|
||||||
|
|
||||||
try! CoreStore.addStorageAndWait(
|
try! ColorsDemo.stack.addStorageAndWait(
|
||||||
SQLiteStore(
|
SQLiteStore(
|
||||||
fileName: "ColorsDemo.sqlite",
|
fileName: "ColorsDemo.sqlite",
|
||||||
configuration: "ObservingDemo",
|
|
||||||
localStorageOptions: .recreateStoreOnModelMismatch
|
localStorageOptions: .recreateStoreOnModelMismatch
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
return ColorsDemo.stack.monitorSectionedList(
|
||||||
return CoreStore.monitorSectionedList(
|
From<Palette>()
|
||||||
From<Palette>(),
|
.sectionBy(\.colorName)
|
||||||
SectionBy(#keyPath(Palette.colorName)),
|
.orderBy(.ascending(\.hue))
|
||||||
OrderBy(.ascending(#keyPath(Palette.hue)))
|
|
||||||
)
|
)
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
@@ -77,7 +90,7 @@ class ListObserverDemoViewController: UITableViewController, ListSectionObserver
|
|||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
|
|
||||||
Static.palettes.removeObserver(self)
|
ColorsDemo.palettes.removeObserver(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -98,7 +111,7 @@ class ListObserverDemoViewController: UITableViewController, ListSectionObserver
|
|||||||
]
|
]
|
||||||
|
|
||||||
let filterBarButton = UIBarButtonItem(
|
let filterBarButton = UIBarButtonItem(
|
||||||
title: Static.filter.rawValue,
|
title: ColorsDemo.filter.rawValue,
|
||||||
style: .plain,
|
style: .plain,
|
||||||
target: self,
|
target: self,
|
||||||
action: #selector(self.filterBarButtonItemTouched(_:))
|
action: #selector(self.filterBarButtonItemTouched(_:))
|
||||||
@@ -109,13 +122,18 @@ class ListObserverDemoViewController: UITableViewController, ListSectionObserver
|
|||||||
target: self,
|
target: self,
|
||||||
action: #selector(self.addBarButtonItemTouched(_:))
|
action: #selector(self.addBarButtonItemTouched(_:))
|
||||||
),
|
),
|
||||||
|
UIBarButtonItem(
|
||||||
|
barButtonSystemItem: .refresh,
|
||||||
|
target: self,
|
||||||
|
action: #selector(self.shuffleBarButtonItemTouched(_:))
|
||||||
|
),
|
||||||
filterBarButton
|
filterBarButton
|
||||||
]
|
]
|
||||||
self.filterBarButton = filterBarButton
|
self.filterBarButton = filterBarButton
|
||||||
|
|
||||||
Static.palettes.addObserver(self)
|
ColorsDemo.palettes.addObserver(self)
|
||||||
|
|
||||||
self.setTable(enabled: !Static.palettes.isPendingRefetch)
|
self.setTable(enabled: !ColorsDemo.palettes.isPendingRefetch)
|
||||||
}
|
}
|
||||||
|
|
||||||
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
||||||
@@ -137,19 +155,19 @@ class ListObserverDemoViewController: UITableViewController, ListSectionObserver
|
|||||||
|
|
||||||
override func numberOfSections(in tableView: UITableView) -> Int {
|
override func numberOfSections(in tableView: UITableView) -> Int {
|
||||||
|
|
||||||
return Static.palettes.numberOfSections()
|
return ColorsDemo.palettes.numberOfSections()
|
||||||
}
|
}
|
||||||
|
|
||||||
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||||
|
|
||||||
return Static.palettes.numberOfObjectsInSection(section)
|
return ColorsDemo.palettes.numberOfObjects(in: section)
|
||||||
}
|
}
|
||||||
|
|
||||||
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||||
|
|
||||||
let cell = tableView.dequeueReusableCell(withIdentifier: "PaletteTableViewCell") as! PaletteTableViewCell
|
let cell = tableView.dequeueReusableCell(withIdentifier: "PaletteTableViewCell") as! PaletteTableViewCell
|
||||||
|
|
||||||
let palette = Static.palettes[indexPath]
|
let palette = ColorsDemo.palettes[indexPath]
|
||||||
cell.colorView?.backgroundColor = palette.color
|
cell.colorView?.backgroundColor = palette.color
|
||||||
cell.label?.text = palette.colorText
|
cell.label?.text = palette.colorText
|
||||||
|
|
||||||
@@ -165,7 +183,7 @@ class ListObserverDemoViewController: UITableViewController, ListSectionObserver
|
|||||||
|
|
||||||
self.performSegue(
|
self.performSegue(
|
||||||
withIdentifier: "ObjectObserverDemoViewController",
|
withIdentifier: "ObjectObserverDemoViewController",
|
||||||
sender: Static.palettes[indexPath]
|
sender: ColorsDemo.palettes[indexPath]
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,8 +192,8 @@ class ListObserverDemoViewController: UITableViewController, ListSectionObserver
|
|||||||
switch editingStyle {
|
switch editingStyle {
|
||||||
|
|
||||||
case .delete:
|
case .delete:
|
||||||
let palette = Static.palettes[indexPath]
|
let palette = ColorsDemo.palettes[indexPath]
|
||||||
CoreStore.perform(
|
ColorsDemo.stack.perform(
|
||||||
asynchronous: { (transaction) in
|
asynchronous: { (transaction) in
|
||||||
|
|
||||||
transaction.delete(palette)
|
transaction.delete(palette)
|
||||||
@@ -190,7 +208,7 @@ class ListObserverDemoViewController: UITableViewController, ListSectionObserver
|
|||||||
|
|
||||||
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
|
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
|
||||||
|
|
||||||
return Static.palettes.sectionInfoAtIndex(section).name
|
return ColorsDemo.palettes.sectionInfo(at: section).name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -213,7 +231,7 @@ class ListObserverDemoViewController: UITableViewController, ListSectionObserver
|
|||||||
|
|
||||||
func listMonitorDidRefetch(_ monitor: ListMonitor<Palette>) {
|
func listMonitorDidRefetch(_ monitor: ListMonitor<Palette>) {
|
||||||
|
|
||||||
self.filterBarButton?.title = Static.filter.rawValue
|
self.filterBarButton?.title = ColorsDemo.filter.rawValue
|
||||||
self.tableView.reloadData()
|
self.tableView.reloadData()
|
||||||
self.setTable(enabled: true)
|
self.setTable(enabled: true)
|
||||||
}
|
}
|
||||||
@@ -235,7 +253,7 @@ class ListObserverDemoViewController: UITableViewController, ListSectionObserver
|
|||||||
|
|
||||||
if let cell = self.tableView.cellForRow(at: indexPath) as? PaletteTableViewCell {
|
if let cell = self.tableView.cellForRow(at: indexPath) as? PaletteTableViewCell {
|
||||||
|
|
||||||
let palette = Static.palettes[indexPath]
|
let palette = ColorsDemo.palettes[indexPath]
|
||||||
cell.colorView?.backgroundColor = palette.color
|
cell.colorView?.backgroundColor = palette.color
|
||||||
cell.label?.text = palette.colorText
|
cell.label?.text = palette.colorText
|
||||||
}
|
}
|
||||||
@@ -255,7 +273,6 @@ class ListObserverDemoViewController: UITableViewController, ListSectionObserver
|
|||||||
self.tableView.insertSections(IndexSet(integer: sectionIndex), with: .automatic)
|
self.tableView.insertSections(IndexSet(integer: sectionIndex), with: .automatic)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func listMonitor(_ monitor: ListMonitor<Palette>, didDeleteSection sectionInfo: NSFetchedResultsSectionInfo, fromSectionIndex sectionIndex: Int) {
|
func listMonitor(_ monitor: ListMonitor<Palette>, didDeleteSection sectionInfo: NSFetchedResultsSectionInfo, fromSectionIndex sectionIndex: Int) {
|
||||||
|
|
||||||
self.tableView.deleteSections(IndexSet(integer: sectionIndex), with: .automatic)
|
self.tableView.deleteSections(IndexSet(integer: sectionIndex), with: .automatic)
|
||||||
@@ -268,10 +285,10 @@ class ListObserverDemoViewController: UITableViewController, ListSectionObserver
|
|||||||
|
|
||||||
@IBAction private dynamic func resetBarButtonItemTouched(_ sender: AnyObject?) {
|
@IBAction private dynamic func resetBarButtonItemTouched(_ sender: AnyObject?) {
|
||||||
|
|
||||||
CoreStore.perform(
|
ColorsDemo.stack.perform(
|
||||||
asynchronous: { (transaction) in
|
asynchronous: { (transaction) in
|
||||||
|
|
||||||
transaction.deleteAll(From<Palette>())
|
try transaction.deleteAll(From<Palette>())
|
||||||
},
|
},
|
||||||
completion: { _ in }
|
completion: { _ in }
|
||||||
)
|
)
|
||||||
@@ -279,16 +296,31 @@ class ListObserverDemoViewController: UITableViewController, ListSectionObserver
|
|||||||
|
|
||||||
@IBAction private dynamic func filterBarButtonItemTouched(_ sender: AnyObject?) {
|
@IBAction private dynamic func filterBarButtonItemTouched(_ sender: AnyObject?) {
|
||||||
|
|
||||||
Static.filter = Static.filter.next()
|
ColorsDemo.filter = ColorsDemo.filter.next()
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction private dynamic func addBarButtonItemTouched(_ sender: AnyObject?) {
|
@IBAction private dynamic func addBarButtonItemTouched(_ sender: AnyObject?) {
|
||||||
|
|
||||||
CoreStore.perform(
|
ColorsDemo.stack.perform(
|
||||||
asynchronous: { (transaction) in
|
asynchronous: { (transaction) in
|
||||||
|
|
||||||
let palette = transaction.create(Into<Palette>())
|
let palette = transaction.create(Into<Palette>())
|
||||||
palette.setInitialValues()
|
palette.setInitialValues(in: transaction)
|
||||||
|
},
|
||||||
|
completion: { _ in }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction private dynamic func shuffleBarButtonItemTouched(_ sender: AnyObject?) {
|
||||||
|
|
||||||
|
ColorsDemo.stack.perform(
|
||||||
|
asynchronous: { (transaction) in
|
||||||
|
|
||||||
|
for palette in try transaction.fetchAll(From<Palette>()) {
|
||||||
|
|
||||||
|
palette.hue .= Palette.randomHue()
|
||||||
|
palette.colorName .= nil
|
||||||
|
}
|
||||||
},
|
},
|
||||||
completion: { _ in }
|
completion: { _ in }
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/05/06.
|
// Created by John Rommel Estropia on 2015/05/06.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
@@ -29,7 +29,7 @@ class ObjectObserverDemoViewController: UIViewController, ObjectObserver {
|
|||||||
|
|
||||||
if let palette = newValue {
|
if let palette = newValue {
|
||||||
|
|
||||||
self.monitor = CoreStore.monitorObject(palette)
|
self.monitor = ColorsDemo.stack.monitorObject(palette)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
@@ -50,22 +50,22 @@ class ObjectObserverDemoViewController: UIViewController, ObjectObserver {
|
|||||||
|
|
||||||
required init?(coder aDecoder: NSCoder) {
|
required init?(coder aDecoder: NSCoder) {
|
||||||
|
|
||||||
if let palette = CoreStore.fetchOne(From<Palette>(), OrderBy(.ascending(#keyPath(Palette.hue)))) {
|
if let palette = try! ColorsDemo.stack.fetchOne(From<Palette>().orderBy(.ascending(\.hue))) {
|
||||||
|
|
||||||
self.monitor = CoreStore.monitorObject(palette)
|
self.monitor = ColorsDemo.stack.monitorObject(palette)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
_ = try? CoreStore.perform(
|
_ = try? ColorsDemo.stack.perform(
|
||||||
synchronous: { (transaction) in
|
synchronous: { (transaction) in
|
||||||
|
|
||||||
let palette = transaction.create(Into(Palette.self))
|
let palette = transaction.create(Into<Palette>())
|
||||||
palette.setInitialValues()
|
palette.setInitialValues(in: transaction)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
let palette = CoreStore.fetchOne(From<Palette>(), OrderBy(.ascending(#keyPath(Palette.hue))))!
|
let palette = try! ColorsDemo.stack.fetchOne(From<Palette>().orderBy(.ascending(\.hue)))!
|
||||||
self.monitor = CoreStore.monitorObject(palette)
|
self.monitor = ColorsDemo.stack.monitorObject(palette)
|
||||||
}
|
}
|
||||||
|
|
||||||
super.init(coder: aDecoder)
|
super.init(coder: aDecoder)
|
||||||
@@ -85,7 +85,7 @@ class ObjectObserverDemoViewController: UIViewController, ObjectObserver {
|
|||||||
|
|
||||||
// MARK: ObjectObserver
|
// MARK: ObjectObserver
|
||||||
|
|
||||||
func objectMonitor(_ monitor: ObjectMonitor<Palette>, didUpdateObject object: Palette, changedPersistentKeys: Set<KeyPath>) {
|
func objectMonitor(_ monitor: ObjectMonitor<Palette>, didUpdateObject object: Palette, changedPersistentKeys: Set<KeyPathString>) {
|
||||||
|
|
||||||
self.reloadPaletteInfo(object, changedKeys: changedPersistentKeys)
|
self.reloadPaletteInfo(object, changedKeys: changedPersistentKeys)
|
||||||
}
|
}
|
||||||
@@ -121,12 +121,12 @@ class ObjectObserverDemoViewController: UIViewController, ObjectObserver {
|
|||||||
@IBAction dynamic func hueSliderValueDidChange(_ sender: AnyObject?) {
|
@IBAction dynamic func hueSliderValueDidChange(_ sender: AnyObject?) {
|
||||||
|
|
||||||
let hue = self.hueSlider?.value ?? 0
|
let hue = self.hueSlider?.value ?? 0
|
||||||
CoreStore.perform(
|
ColorsDemo.stack.perform(
|
||||||
asynchronous: { [weak self] (transaction) in
|
asynchronous: { [weak self] (transaction) in
|
||||||
|
|
||||||
if let palette = transaction.edit(self?.monitor?.object) {
|
if let palette = transaction.edit(self?.monitor?.object) {
|
||||||
|
|
||||||
palette.hue = Int32(hue)
|
palette.hue .= Int(hue)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
completion: { _ in }
|
completion: { _ in }
|
||||||
@@ -136,12 +136,12 @@ class ObjectObserverDemoViewController: UIViewController, ObjectObserver {
|
|||||||
@IBAction dynamic func saturationSliderValueDidChange(_ sender: AnyObject?) {
|
@IBAction dynamic func saturationSliderValueDidChange(_ sender: AnyObject?) {
|
||||||
|
|
||||||
let saturation = self.saturationSlider?.value ?? 0
|
let saturation = self.saturationSlider?.value ?? 0
|
||||||
CoreStore.perform(
|
ColorsDemo.stack.perform(
|
||||||
asynchronous: { [weak self] (transaction) in
|
asynchronous: { [weak self] (transaction) in
|
||||||
|
|
||||||
if let palette = transaction.edit(self?.monitor?.object) {
|
if let palette = transaction.edit(self?.monitor?.object) {
|
||||||
|
|
||||||
palette.saturation = saturation
|
palette.saturation .= saturation
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
completion: { _ in }
|
completion: { _ in }
|
||||||
@@ -151,12 +151,12 @@ class ObjectObserverDemoViewController: UIViewController, ObjectObserver {
|
|||||||
@IBAction dynamic func brightnessSliderValueDidChange(_ sender: AnyObject?) {
|
@IBAction dynamic func brightnessSliderValueDidChange(_ sender: AnyObject?) {
|
||||||
|
|
||||||
let brightness = self.brightnessSlider?.value ?? 0
|
let brightness = self.brightnessSlider?.value ?? 0
|
||||||
CoreStore.perform(
|
ColorsDemo.stack.perform(
|
||||||
asynchronous: { [weak self] (transaction) in
|
asynchronous: { [weak self] (transaction) in
|
||||||
|
|
||||||
if let palette = transaction.edit(self?.monitor?.object) {
|
if let palette = transaction.edit(self?.monitor?.object) {
|
||||||
|
|
||||||
palette.brightness = brightness
|
palette.brightness .= brightness
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
completion: { _ in }
|
completion: { _ in }
|
||||||
@@ -165,7 +165,7 @@ class ObjectObserverDemoViewController: UIViewController, ObjectObserver {
|
|||||||
|
|
||||||
@IBAction dynamic func deleteBarButtonTapped(_ sender: AnyObject?) {
|
@IBAction dynamic func deleteBarButtonTapped(_ sender: AnyObject?) {
|
||||||
|
|
||||||
CoreStore.perform(
|
ColorsDemo.stack.perform(
|
||||||
asynchronous: { [weak self] (transaction) in
|
asynchronous: { [weak self] (transaction) in
|
||||||
|
|
||||||
transaction.delete(self?.monitor?.object)
|
transaction.delete(self?.monitor?.object)
|
||||||
@@ -176,7 +176,7 @@ class ObjectObserverDemoViewController: UIViewController, ObjectObserver {
|
|||||||
|
|
||||||
func reloadPaletteInfo(_ palette: Palette, changedKeys: Set<String>?) {
|
func reloadPaletteInfo(_ palette: Palette, changedKeys: Set<String>?) {
|
||||||
|
|
||||||
self.colorNameLabel?.text = palette.colorName
|
self.colorNameLabel?.text = palette.colorName.value
|
||||||
|
|
||||||
let color = palette.color
|
let color = palette.color
|
||||||
self.colorNameLabel?.textColor = color
|
self.colorNameLabel?.textColor = color
|
||||||
@@ -184,17 +184,17 @@ class ObjectObserverDemoViewController: UIViewController, ObjectObserver {
|
|||||||
|
|
||||||
self.hsbLabel?.text = palette.colorText
|
self.hsbLabel?.text = palette.colorText
|
||||||
|
|
||||||
if changedKeys == nil || changedKeys?.contains(#keyPath(Palette.hue)) == true {
|
if changedKeys == nil || changedKeys?.contains(String(keyPath: \Palette.hue)) == true {
|
||||||
|
|
||||||
self.hueSlider?.value = Float(palette.hue)
|
self.hueSlider?.value = Float(palette.hue.value)
|
||||||
}
|
}
|
||||||
if changedKeys == nil || changedKeys?.contains(#keyPath(Palette.saturation)) == true {
|
if changedKeys == nil || changedKeys?.contains(String(keyPath: \Palette.saturation)) == true {
|
||||||
|
|
||||||
self.saturationSlider?.value = palette.saturation
|
self.saturationSlider?.value = palette.saturation.value
|
||||||
}
|
}
|
||||||
if changedKeys == nil || changedKeys?.contains(#keyPath(Palette.brightness)) == true {
|
if changedKeys == nil || changedKeys?.contains(String(keyPath: \Palette.brightness)) == true {
|
||||||
|
|
||||||
self.brightnessSlider?.value = palette.brightness
|
self.brightnessSlider?.value = palette.brightness.value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/05/24.
|
// Created by John Rommel Estropia on 2015/05/24.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/05/05.
|
// Created by John Rommel Estropia on 2015/05/05.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
@@ -14,64 +14,70 @@ import CoreStore
|
|||||||
|
|
||||||
// MARK: - Palette
|
// MARK: - Palette
|
||||||
|
|
||||||
class Palette: NSManagedObject {
|
final class Palette: CoreStoreObject {
|
||||||
|
|
||||||
@NSManaged var hue: Int32
|
|
||||||
@NSManaged var saturation: Float
|
|
||||||
@NSManaged var brightness: Float
|
|
||||||
|
|
||||||
@objc dynamic var colorName: String {
|
let hue = Value.Required<Int>("hue", initial: 0)
|
||||||
|
let saturation = Value.Required<Float>("saturation", initial: 0)
|
||||||
|
let brightness = Value.Required<Float>("brightness", initial: 0)
|
||||||
|
|
||||||
|
let colorName = Value.Optional<String>(
|
||||||
|
"colorName",
|
||||||
|
isTransient: true,
|
||||||
|
customGetter: Palette.getColorName
|
||||||
|
)
|
||||||
|
|
||||||
|
static func randomHue() -> Int {
|
||||||
|
|
||||||
|
return Int(arc4random_uniform(360))
|
||||||
|
}
|
||||||
|
|
||||||
|
private static func getColorName(_ partialObject: PartialObject<Palette>) -> String? {
|
||||||
|
|
||||||
get {
|
if let colorName = partialObject.primitiveValue(for: { $0.colorName }) {
|
||||||
|
|
||||||
let KVCKey = #keyPath(Palette.colorName)
|
|
||||||
if let colorName = self.getValue(forKvcKey: KVCKey) as? String {
|
|
||||||
|
|
||||||
return colorName
|
|
||||||
}
|
|
||||||
|
|
||||||
let colorName: String
|
|
||||||
switch self.hue % 360 {
|
|
||||||
|
|
||||||
case 0 ..< 20: colorName = "Lower Reds"
|
|
||||||
case 20 ..< 57: colorName = "Oranges and Browns"
|
|
||||||
case 57 ..< 90: colorName = "Yellow-Greens"
|
|
||||||
case 90 ..< 159: colorName = "Greens"
|
|
||||||
case 159 ..< 197: colorName = "Blue-Greens"
|
|
||||||
case 197 ..< 241: colorName = "Blues"
|
|
||||||
case 241 ..< 297: colorName = "Violets"
|
|
||||||
case 297 ..< 331: colorName = "Magentas"
|
|
||||||
default: colorName = "Upper Reds"
|
|
||||||
}
|
|
||||||
|
|
||||||
self.setPrimitiveValue(colorName, forKey: KVCKey)
|
|
||||||
return colorName
|
return colorName
|
||||||
}
|
}
|
||||||
set {
|
|
||||||
|
let colorName: String
|
||||||
|
switch partialObject.value(for: { $0.hue }) % 360 {
|
||||||
|
|
||||||
self.setValue(newValue.cs_toImportableNativeType(), forKvcKey: #keyPath(Palette.colorName))
|
case 0 ..< 20: colorName = "Lower Reds"
|
||||||
|
case 20 ..< 57: colorName = "Oranges and Browns"
|
||||||
|
case 57 ..< 90: colorName = "Yellow-Greens"
|
||||||
|
case 90 ..< 159: colorName = "Greens"
|
||||||
|
case 159 ..< 197: colorName = "Blue-Greens"
|
||||||
|
case 197 ..< 241: colorName = "Blues"
|
||||||
|
case 241 ..< 297: colorName = "Violets"
|
||||||
|
case 297 ..< 331: colorName = "Magentas"
|
||||||
|
default: colorName = "Upper Reds"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
partialObject.setPrimitiveValue(colorName, for: { $0.colorName })
|
||||||
|
return colorName
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Palette {
|
||||||
|
|
||||||
var color: UIColor {
|
var color: UIColor {
|
||||||
|
|
||||||
return UIColor(
|
return UIColor(
|
||||||
hue: CGFloat(self.hue) / 360.0,
|
hue: CGFloat(self.hue.value) / 360.0,
|
||||||
saturation: CGFloat(self.saturation),
|
saturation: CGFloat(self.saturation.value),
|
||||||
brightness: CGFloat(self.brightness),
|
brightness: CGFloat(self.brightness.value),
|
||||||
alpha: 1.0
|
alpha: 1.0
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
var colorText: String {
|
var colorText: String {
|
||||||
|
|
||||||
return "H: \(self.hue)˚, S: \(round(self.saturation * 100.0))%, B: \(round(self.brightness * 100.0))%"
|
return "H: \(self.hue.value)˚, S: \(round(self.saturation.value * 100.0))%, B: \(round(self.brightness.value * 100.0))%"
|
||||||
}
|
}
|
||||||
|
|
||||||
func setInitialValues() {
|
func setInitialValues(in transaction: BaseDataTransaction) {
|
||||||
|
|
||||||
self.hue = Int32(arc4random_uniform(360))
|
self.hue .= Palette.randomHue()
|
||||||
self.saturation = 1.0
|
self.saturation .= Float(1.0)
|
||||||
self.brightness = Float(arc4random_uniform(70) + 30) / 100.0
|
self.brightness .= Float(arc4random_uniform(70) + 30) / 100.0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/05/05.
|
// Created by John Rommel Estropia on 2015/05/05.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/06/05.
|
// Created by John Rommel Estropia on 2015/06/05.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
@@ -16,11 +16,6 @@ class CustomLoggerViewController: UIViewController, CoreStoreLogger {
|
|||||||
|
|
||||||
// MARK: NSObject
|
// MARK: NSObject
|
||||||
|
|
||||||
deinit {
|
|
||||||
|
|
||||||
CoreStore.logger = DefaultLogger()
|
|
||||||
}
|
|
||||||
|
|
||||||
let dataStack = DataStack()
|
let dataStack = DataStack()
|
||||||
|
|
||||||
// MARK: UIViewController
|
// MARK: UIViewController
|
||||||
@@ -30,13 +25,14 @@ class CustomLoggerViewController: UIViewController, CoreStoreLogger {
|
|||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
|
|
||||||
try! self.dataStack.addStorageAndWait(SQLiteStore(fileName: "emptyStore.sqlite"))
|
try! self.dataStack.addStorageAndWait(SQLiteStore(fileName: "emptyStore.sqlite"))
|
||||||
CoreStore.logger = self
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override func viewDidAppear(_ animated: Bool) {
|
override func viewDidAppear(_ animated: Bool) {
|
||||||
|
|
||||||
super.viewDidAppear(animated)
|
super.viewDidAppear(animated)
|
||||||
|
|
||||||
|
CoreStore.logger = self
|
||||||
|
|
||||||
let alert = UIAlertController(
|
let alert = UIAlertController(
|
||||||
title: "Logger Demo",
|
title: "Logger Demo",
|
||||||
message: "This demo shows how to plug-in any logging framework to CoreStore.\n\nThe view controller implements CoreStoreLogger and appends all logs to the text view.",
|
message: "This demo shows how to plug-in any logging framework to CoreStore.\n\nThe view controller implements CoreStoreLogger and appends all logs to the text view.",
|
||||||
@@ -46,6 +42,13 @@ class CustomLoggerViewController: UIViewController, CoreStoreLogger {
|
|||||||
self.present(alert, animated: true, completion: nil)
|
self.present(alert, animated: true, completion: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func viewDidDisappear(_ animated: Bool) {
|
||||||
|
|
||||||
|
super.viewDidDisappear(animated)
|
||||||
|
|
||||||
|
CoreStore.logger = DefaultLogger()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// MARK: CoreStoreLogger
|
// MARK: CoreStoreLogger
|
||||||
|
|
||||||
@@ -99,8 +102,8 @@ class CustomLoggerViewController: UIViewController, CoreStoreLogger {
|
|||||||
|
|
||||||
case 0?:
|
case 0?:
|
||||||
let request = NSFetchRequest<NSFetchRequestResult>()
|
let request = NSFetchRequest<NSFetchRequestResult>()
|
||||||
Where(true).applyToFetchRequest(request)
|
Where<NSManagedObject>(true).applyToFetchRequest(request)
|
||||||
Where(false).applyToFetchRequest(request)
|
Where<NSManagedObject>(false).applyToFetchRequest(request)
|
||||||
|
|
||||||
case 1?:
|
case 1?:
|
||||||
_ = try? dataStack.addStorageAndWait(
|
_ = try? dataStack.addStorageAndWait(
|
||||||
@@ -113,7 +116,7 @@ class CustomLoggerViewController: UIViewController, CoreStoreLogger {
|
|||||||
case 2?:
|
case 2?:
|
||||||
DispatchQueue.global(qos: .background).async {
|
DispatchQueue.global(qos: .background).async {
|
||||||
|
|
||||||
_ = self.dataStack.fetchOne(From<Palette>())
|
_ = try! self.dataStack.fetchOne(From<Place>())
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/06/21.
|
// Created by John Rommel Estropia on 2015/06/21.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
@@ -46,7 +46,7 @@ class MigrationsDemoViewController: UIViewController, ListObserver, UITableViewD
|
|||||||
self.present(alert, animated: true, completion: nil)
|
self.present(alert, animated: true, completion: nil)
|
||||||
|
|
||||||
|
|
||||||
let modelMetadata = withExtendedLifetime(DataStack(modelName: "MigrationDemo")) {
|
let modelMetadata = withExtendedLifetime(DataStack(xcodeModelName: "MigrationDemo")) {
|
||||||
(dataStack: DataStack) -> ModelMetadata in
|
(dataStack: DataStack) -> ModelMetadata in
|
||||||
|
|
||||||
let models = self.models
|
let models = self.models
|
||||||
@@ -79,7 +79,7 @@ class MigrationsDemoViewController: UIViewController, ListObserver, UITableViewD
|
|||||||
func listMonitorDidChange(_ monitor: ListMonitor<NSManagedObject>) {
|
func listMonitorDidChange(_ monitor: ListMonitor<NSManagedObject>) {
|
||||||
|
|
||||||
if self.lastSelectedIndexPath == nil,
|
if self.lastSelectedIndexPath == nil,
|
||||||
let numberOfObjectsInSection = self.listMonitor?.numberOfObjectsInSection(0),
|
let numberOfObjectsInSection = self.listMonitor?.numberOfObjects(in: 0),
|
||||||
numberOfObjectsInSection > 0 {
|
numberOfObjectsInSection > 0 {
|
||||||
|
|
||||||
self.tableView?.reloadData()
|
self.tableView?.reloadData()
|
||||||
@@ -91,11 +91,16 @@ class MigrationsDemoViewController: UIViewController, ListObserver, UITableViewD
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func listMonitorDidRefetch(_ monitor: ListMonitor<NSManagedObject>) {
|
||||||
|
|
||||||
|
self.listMonitorDidChange(monitor)
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: UITableViewDataSource
|
// MARK: UITableViewDataSource
|
||||||
|
|
||||||
@objc dynamic func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
@objc dynamic func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||||
|
|
||||||
return self.listMonitor?.numberOfObjectsInSection(0) ?? 0
|
return self.listMonitor?.numberOfObjects(in: 0) ?? 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc dynamic func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
@objc dynamic func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||||
@@ -104,7 +109,7 @@ class MigrationsDemoViewController: UIViewController, ListObserver, UITableViewD
|
|||||||
|
|
||||||
let dna = (self.listMonitor?[indexPath] as? OrganismProtocol)?.dna.description ?? ""
|
let dna = (self.listMonitor?[indexPath] as? OrganismProtocol)?.dna.description ?? ""
|
||||||
cell.dnaLabel?.text = "DNA: \(dna)"
|
cell.dnaLabel?.text = "DNA: \(dna)"
|
||||||
cell.mutateButtonHandler = { [weak self] _ -> Void in
|
cell.mutateButtonHandler = { [weak self] () -> Void in
|
||||||
|
|
||||||
guard let `self` = self,
|
guard let `self` = self,
|
||||||
let dataStack = self.dataStack,
|
let dataStack = self.dataStack,
|
||||||
@@ -148,7 +153,10 @@ class MigrationsDemoViewController: UIViewController, ListObserver, UITableViewD
|
|||||||
label: "Model V1",
|
label: "Model V1",
|
||||||
entityType: OrganismV1.self,
|
entityType: OrganismV1.self,
|
||||||
schemaHistory: SchemaHistory(
|
schemaHistory: SchemaHistory(
|
||||||
modelName: "MigrationDemo",
|
XcodeDataModelSchema.from(
|
||||||
|
modelName: "MigrationDemo",
|
||||||
|
migrationChain: ["MigrationDemoV3", "MigrationDemoV2", "MigrationDemo"]
|
||||||
|
),
|
||||||
migrationChain: ["MigrationDemoV3", "MigrationDemoV2", "MigrationDemo"]
|
migrationChain: ["MigrationDemoV3", "MigrationDemoV2", "MigrationDemo"]
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
@@ -156,7 +164,13 @@ class MigrationsDemoViewController: UIViewController, ListObserver, UITableViewD
|
|||||||
label: "Model V2",
|
label: "Model V2",
|
||||||
entityType: OrganismV2.self,
|
entityType: OrganismV2.self,
|
||||||
schemaHistory: SchemaHistory(
|
schemaHistory: SchemaHistory(
|
||||||
modelName: "MigrationDemo",
|
XcodeDataModelSchema.from(
|
||||||
|
modelName: "MigrationDemo",
|
||||||
|
migrationChain: [
|
||||||
|
"MigrationDemo": "MigrationDemoV2",
|
||||||
|
"MigrationDemoV3": "MigrationDemoV2"
|
||||||
|
]
|
||||||
|
),
|
||||||
migrationChain: [
|
migrationChain: [
|
||||||
"MigrationDemo": "MigrationDemoV2",
|
"MigrationDemo": "MigrationDemoV2",
|
||||||
"MigrationDemoV3": "MigrationDemoV2"
|
"MigrationDemoV3": "MigrationDemoV2"
|
||||||
@@ -167,7 +181,10 @@ class MigrationsDemoViewController: UIViewController, ListObserver, UITableViewD
|
|||||||
label: "Model V3",
|
label: "Model V3",
|
||||||
entityType: OrganismV3.self,
|
entityType: OrganismV3.self,
|
||||||
schemaHistory: SchemaHistory(
|
schemaHistory: SchemaHistory(
|
||||||
modelName: "MigrationDemo",
|
XcodeDataModelSchema.from(
|
||||||
|
modelName: "MigrationDemo",
|
||||||
|
migrationChain: ["MigrationDemo", "MigrationDemoV2", "MigrationDemoV3"]
|
||||||
|
),
|
||||||
migrationChain: ["MigrationDemo", "MigrationDemoV2", "MigrationDemoV3"]
|
migrationChain: ["MigrationDemo", "MigrationDemoV2", "MigrationDemoV3"]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -269,9 +286,9 @@ class MigrationsDemoViewController: UIViewController, ListObserver, UITableViewD
|
|||||||
|
|
||||||
self.set(dataStack: dataStack, model: model, scrollToSelection: true)
|
self.set(dataStack: dataStack, model: model, scrollToSelection: true)
|
||||||
|
|
||||||
let count = dataStack.queryValue(
|
let count = try! dataStack.queryValue(
|
||||||
From(model.entityType),
|
From<NSManagedObject>(model.entityType)
|
||||||
Select<Int>(.count(#keyPath(OrganismV1.dna))))!
|
.select(Int.self, .count(#keyPath(OrganismV1.dna))))!
|
||||||
if count > 0 {
|
if count > 0 {
|
||||||
|
|
||||||
self.setEnabled(true)
|
self.setEnabled(true)
|
||||||
@@ -344,20 +361,24 @@ class MigrationsDemoViewController: UIViewController, ListObserver, UITableViewD
|
|||||||
|
|
||||||
self.segmentedControl?.selectedSegmentIndex = self.models
|
self.segmentedControl?.selectedSegmentIndex = self.models
|
||||||
.index(
|
.index(
|
||||||
where: { (_, _, schemaHistory) -> Bool in
|
where: { (arg) -> Bool in
|
||||||
|
|
||||||
schemaHistory.currentModelVersion == model.schemaHistory.currentModelVersion
|
let (_, _, schemaHistory) = arg
|
||||||
|
return schemaHistory.currentModelVersion == model.schemaHistory.currentModelVersion
|
||||||
}
|
}
|
||||||
)!
|
)!
|
||||||
|
|
||||||
self._dataStack = dataStack
|
self._dataStack = dataStack
|
||||||
let listMonitor = dataStack.monitorList(From(model.entityType), OrderBy(.descending("dna")))
|
let listMonitor = dataStack.monitorList(
|
||||||
|
From(model.entityType),
|
||||||
|
OrderBy<NSManagedObject>(.descending(#keyPath(OrganismV1.dna)))
|
||||||
|
)
|
||||||
listMonitor.addObserver(self)
|
listMonitor.addObserver(self)
|
||||||
self._listMonitor = listMonitor
|
self._listMonitor = listMonitor
|
||||||
|
|
||||||
if self.lastSelectedIndexPath == nil {
|
if self.lastSelectedIndexPath == nil {
|
||||||
|
|
||||||
if listMonitor.numberOfObjectsInSection(0) > 0 {
|
if listMonitor.numberOfObjects(in: 0) > 0 {
|
||||||
|
|
||||||
self.setSelectedIndexPath(IndexPath(row: 0, section: 0), scrollToSelection: true)
|
self.setSelectedIndexPath(IndexPath(row: 0, section: 0), scrollToSelection: true)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/06/27.
|
// Created by John Rommel Estropia on 2015/06/27.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/07/12.
|
// Created by John Rommel Estropia on 2015/07/12.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/06/21.
|
// Created by John Rommel Estropia on 2015/06/21.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/06/21.
|
// Created by John Rommel Estropia on 2015/06/21.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/06/27.
|
// Created by John Rommel Estropia on 2015/06/27.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import CoreData
|
import CoreData
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/06/27.
|
// Created by John Rommel Estropia on 2015/06/27.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/06/06.
|
// Created by John Rommel Estropia on 2015/06/06.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/06/06.
|
// Created by John Rommel Estropia on 2015/06/06.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/05/24.
|
// Created by John Rommel Estropia on 2015/05/24.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
@@ -17,7 +17,7 @@ private struct Static {
|
|||||||
|
|
||||||
static let facebookStack: DataStack = {
|
static let facebookStack: DataStack = {
|
||||||
|
|
||||||
let dataStack = DataStack(modelName: "StackSetupDemo")
|
let dataStack = DataStack(xcodeModelName: "StackSetupDemo")
|
||||||
try! dataStack.addStorageAndWait(
|
try! dataStack.addStorageAndWait(
|
||||||
SQLiteStore(
|
SQLiteStore(
|
||||||
fileName: "AccountsDemo_FB_Male.sqlite",
|
fileName: "AccountsDemo_FB_Male.sqlite",
|
||||||
@@ -36,7 +36,7 @@ private struct Static {
|
|||||||
_ = try? dataStack.perform(
|
_ = try? dataStack.perform(
|
||||||
synchronous: { (transaction) in
|
synchronous: { (transaction) in
|
||||||
|
|
||||||
transaction.deleteAll(From<UserAccount>())
|
try transaction.deleteAll(From<UserAccount>())
|
||||||
|
|
||||||
let account1 = transaction.create(Into<MaleAccount>(maleConfiguration))
|
let account1 = transaction.create(Into<MaleAccount>(maleConfiguration))
|
||||||
account1.accountType = "Facebook"
|
account1.accountType = "Facebook"
|
||||||
@@ -55,7 +55,7 @@ private struct Static {
|
|||||||
|
|
||||||
static let twitterStack: DataStack = {
|
static let twitterStack: DataStack = {
|
||||||
|
|
||||||
let dataStack = DataStack(modelName: "StackSetupDemo")
|
let dataStack = DataStack(xcodeModelName: "StackSetupDemo")
|
||||||
try! dataStack.addStorageAndWait(
|
try! dataStack.addStorageAndWait(
|
||||||
SQLiteStore(
|
SQLiteStore(
|
||||||
fileName: "AccountsDemo_TW_Male.sqlite",
|
fileName: "AccountsDemo_TW_Male.sqlite",
|
||||||
@@ -74,7 +74,7 @@ private struct Static {
|
|||||||
_ = try? dataStack.perform(
|
_ = try? dataStack.perform(
|
||||||
synchronous: { (transaction) in
|
synchronous: { (transaction) in
|
||||||
|
|
||||||
transaction.deleteAll(From<UserAccount>())
|
try transaction.deleteAll(From<UserAccount>())
|
||||||
|
|
||||||
let account1 = transaction.create(Into<MaleAccount>(maleConfiguration))
|
let account1 = transaction.create(Into<MaleAccount>(maleConfiguration))
|
||||||
account1.accountType = "Twitter"
|
account1.accountType = "Twitter"
|
||||||
@@ -99,8 +99,8 @@ private struct Static {
|
|||||||
class StackSetupDemoViewController: UITableViewController {
|
class StackSetupDemoViewController: UITableViewController {
|
||||||
|
|
||||||
let accounts = [
|
let accounts = [
|
||||||
Static.facebookStack.fetchAll(From(UserAccount.self)) ?? [],
|
try! Static.facebookStack.fetchAll(From<UserAccount>()),
|
||||||
Static.twitterStack.fetchAll(From(UserAccount.self)) ?? []
|
try! Static.twitterStack.fetchAll(From<UserAccount>())
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/05/24.
|
// Created by John Rommel Estropia on 2015/05/24.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/05/24.
|
// Created by John Rommel Estropia on 2015/05/24.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|||||||
@@ -3,10 +3,11 @@
|
|||||||
// CoreStoreDemo
|
// CoreStoreDemo
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2015/05/24.
|
// Created by John Rommel Estropia on 2015/05/24.
|
||||||
// Copyright © 2015 John Rommel Estropia. All rights reserved.
|
// Copyright © 2018 John Rommel Estropia. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
import Contacts
|
||||||
import CoreLocation
|
import CoreLocation
|
||||||
import MapKit
|
import MapKit
|
||||||
import AddressBookUI
|
import AddressBookUI
|
||||||
@@ -25,7 +26,7 @@ private struct Static {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
var place = CoreStore.fetchOne(From<Place>())
|
var place = try! CoreStore.fetchOne(From<Place>())
|
||||||
if place == nil {
|
if place == nil {
|
||||||
|
|
||||||
_ = try? CoreStore.perform(
|
_ = try? CoreStore.perform(
|
||||||
@@ -35,7 +36,7 @@ private struct Static {
|
|||||||
place.setInitialValues()
|
place.setInitialValues()
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
place = CoreStore.fetchOne(From<Place>())
|
place = try! CoreStore.fetchOne(From<Place>())
|
||||||
}
|
}
|
||||||
|
|
||||||
return CoreStore.monitorObject(place!)
|
return CoreStore.monitorObject(place!)
|
||||||
@@ -131,7 +132,7 @@ class TransactionsDemoViewController: UIViewController, MKMapViewDelegate, Objec
|
|||||||
// none
|
// none
|
||||||
}
|
}
|
||||||
|
|
||||||
func objectMonitor(_ monitor: ObjectMonitor<Place>, didUpdateObject object: Place, changedPersistentKeys: Set<KeyPath>) {
|
func objectMonitor(_ monitor: ObjectMonitor<Place>, didUpdateObject object: Place, changedPersistentKeys: Set<KeyPathString>) {
|
||||||
|
|
||||||
if let mapView = self.mapView {
|
if let mapView = self.mapView {
|
||||||
|
|
||||||
@@ -203,11 +204,23 @@ class TransactionsDemoViewController: UIViewController, MKMapViewDelegate, Objec
|
|||||||
CLLocation(latitude: place.latitude, longitude: place.longitude),
|
CLLocation(latitude: place.latitude, longitude: place.longitude),
|
||||||
completionHandler: { [weak self] (placemarks, error) -> Void in
|
completionHandler: { [weak self] (placemarks, error) -> Void in
|
||||||
|
|
||||||
if let placemark = placemarks?.first, let addressDictionary = placemark.addressDictionary {
|
if let placemark = placemarks?.first, let dictionary = placemark.addressDictionary {
|
||||||
|
|
||||||
let place = transaction.edit(Static.placeController.object)
|
let place = transaction.edit(Static.placeController.object)
|
||||||
place?.title = placemark.name
|
place?.title = placemark.name
|
||||||
place?.subtitle = ABCreateStringWithAddressDictionary(addressDictionary, true)
|
place?.subtitle = CNPostalAddressFormatter.string(
|
||||||
|
from: autoreleasepool {
|
||||||
|
|
||||||
|
let address = CNMutablePostalAddress()
|
||||||
|
(dictionary["Street"] as? String).flatMap({ address.street = $0 })
|
||||||
|
(dictionary["State"] as? String).flatMap({ address.state = $0 })
|
||||||
|
(dictionary["City"] as? String).flatMap({ address.city = $0 })
|
||||||
|
(dictionary["Country"] as? String).flatMap({ address.country = $0 })
|
||||||
|
(dictionary["ZIP"] as? String).flatMap({ address.postalCode = $0 })
|
||||||
|
return address
|
||||||
|
},
|
||||||
|
style: .mailingAddress
|
||||||
|
)
|
||||||
transaction.commit { (_) -> Void in }
|
transaction.commit { (_) -> Void in }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// BaseTestCase.swift
|
// BaseTestCase.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -36,11 +36,10 @@ class BaseTestCase: XCTestCase {
|
|||||||
// MARK: Internal
|
// MARK: Internal
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
@discardableResult
|
func prepareStack(configurations: [ModelConfiguration] = [nil], _ closure: (_ dataStack: DataStack) throws -> Void) {
|
||||||
func prepareStack<T>(configurations: [ModelConfiguration] = [nil], _ closure: (_ dataStack: DataStack) -> T) -> T {
|
|
||||||
|
|
||||||
let stack = DataStack(
|
let stack = DataStack(
|
||||||
modelName: "Model",
|
xcodeModelName: "Model",
|
||||||
bundle: Bundle(for: type(of: self))
|
bundle: Bundle(for: type(of: self))
|
||||||
)
|
)
|
||||||
do {
|
do {
|
||||||
@@ -57,16 +56,16 @@ class BaseTestCase: XCTestCase {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
try closure(stack)
|
||||||
}
|
}
|
||||||
catch let error as NSError {
|
catch let error as NSError {
|
||||||
|
|
||||||
XCTFail(error.coreStoreDumpString)
|
XCTFail(error.coreStoreDumpString)
|
||||||
}
|
}
|
||||||
return closure(stack)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
func expectLogger<T>(_ expectations: [TestLogger.Expectation], closure: () -> T) -> T {
|
func expectLogger<T>(_ expectations: [TestLogger.Expectation], closure: () throws -> T) rethrows -> T {
|
||||||
|
|
||||||
CoreStore.logger = TestLogger(self.prepareLoggerExpectations(expectations))
|
CoreStore.logger = TestLogger(self.prepareLoggerExpectations(expectations))
|
||||||
defer {
|
defer {
|
||||||
@@ -74,7 +73,7 @@ class BaseTestCase: XCTestCase {
|
|||||||
self.checkExpectationsImmediately()
|
self.checkExpectationsImmediately()
|
||||||
CoreStore.logger = TestLogger([:])
|
CoreStore.logger = TestLogger([:])
|
||||||
}
|
}
|
||||||
return closure()
|
return try closure()
|
||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
|
|||||||
@@ -2,8 +2,25 @@
|
|||||||
// BaseTestDataTestCase.swift
|
// BaseTestDataTestCase.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Created by John Rommel Estropia on 2016/06/11.
|
// Copyright © 2018 John Rommel Estropia
|
||||||
// Copyright © 2016 John Rommel Estropia. All rights reserved.
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in all
|
||||||
|
// copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// BridgingTests.h
|
// BridgingTests.h
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// BridgingTests.m
|
// BridgingTests.m
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -163,7 +163,7 @@
|
|||||||
- (void)test_ThatDataStacks_BridgeCorrectly {
|
- (void)test_ThatDataStacks_BridgeCorrectly {
|
||||||
|
|
||||||
CSDataStack *dataStack = [[CSDataStack alloc]
|
CSDataStack *dataStack = [[CSDataStack alloc]
|
||||||
initWithModelName:@"Model"
|
initWithXcodeModelName:@"Model"
|
||||||
bundle:[NSBundle bundleForClass:[self class]]
|
bundle:[NSBundle bundleForClass:[self class]]
|
||||||
versionChain:nil];
|
versionChain:nil];
|
||||||
XCTAssertNotNil(dataStack);
|
XCTAssertNotNil(dataStack);
|
||||||
@@ -193,7 +193,17 @@
|
|||||||
XCTAssertEqualObjects([[sqliteStorage class] storeType], [CSSQLiteStore storeType]);
|
XCTAssertEqualObjects([[sqliteStorage class] storeType], [CSSQLiteStore storeType]);
|
||||||
XCTAssertEqualObjects([[sqliteStorage class] storeType], NSSQLiteStoreType);
|
XCTAssertEqualObjects([[sqliteStorage class] storeType], NSSQLiteStoreType);
|
||||||
XCTAssertNil(sqliteStorage.configuration);
|
XCTAssertNil(sqliteStorage.configuration);
|
||||||
XCTAssertEqualObjects(sqliteStorage.storeOptions, @{ NSSQLitePragmasOption: @{ @"journal_mode": @"WAL" } });
|
NSDictionary *storeOptions;
|
||||||
|
if (@available(iOS 11.0, macOS 10.13, tvOS 11.0, *)) {
|
||||||
|
|
||||||
|
storeOptions = @{ NSSQLitePragmasOption: @{ @"journal_mode": @"WAL" },
|
||||||
|
NSBinaryStoreInsecureDecodingCompatibilityOption: @YES };
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
storeOptions = @{ NSSQLitePragmasOption: @{ @"journal_mode": @"WAL" }};
|
||||||
|
}
|
||||||
|
XCTAssertEqualObjects(sqliteStorage.storeOptions, storeOptions);
|
||||||
XCTAssertNil(sqliteError);
|
XCTAssertNil(sqliteError);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,7 +211,7 @@
|
|||||||
|
|
||||||
[CSCoreStore
|
[CSCoreStore
|
||||||
setDefaultStack:[[CSDataStack alloc]
|
setDefaultStack:[[CSDataStack alloc]
|
||||||
initWithModelName:@"Model"
|
initWithXcodeModelName:@"Model"
|
||||||
bundle:[NSBundle bundleForClass:[self class]]
|
bundle:[NSBundle bundleForClass:[self class]]
|
||||||
versionChain:nil]];
|
versionChain:nil]];
|
||||||
[CSCoreStore
|
[CSCoreStore
|
||||||
@@ -253,37 +263,5 @@
|
|||||||
}
|
}
|
||||||
[self waitForExpectationsWithTimeout:10 handler:nil];
|
[self waitForExpectationsWithTimeout:10 handler:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
#if TARGET_OS_IOS || TARGET_OS_WATCHOS || TARGET_OS_TV
|
|
||||||
|
|
||||||
- (void)test_ThatDataStacks_CanCreateCustomFetchedResultsControllers {
|
|
||||||
|
|
||||||
[CSCoreStore
|
|
||||||
setDefaultStack:[[CSDataStack alloc]
|
|
||||||
initWithModelName:@"Model"
|
|
||||||
bundle:[NSBundle bundleForClass:[self class]]
|
|
||||||
versionChain:nil]];
|
|
||||||
[CSCoreStore
|
|
||||||
addInMemoryStorageAndWait:[CSInMemoryStore new]
|
|
||||||
error:nil];
|
|
||||||
NSFetchedResultsController *controller =
|
|
||||||
[[CSCoreStore defaultStack]
|
|
||||||
createFetchedResultsControllerFrom:CSFromClass([TestEntity1 class])
|
|
||||||
sectionBy:[CSSectionBy keyPath:CSKeyPath(TestEntity1, testString)]
|
|
||||||
fetchClauses:@[CSWhereFormat(@"%K > %d", CSKeyPath(TestEntity1, testEntityID), 100),
|
|
||||||
CSOrderByKeys(CSSortAscending(CSKeyPath(TestEntity1, testString)), nil),
|
|
||||||
CSTweakRequest(^(NSFetchRequest *fetchRequest) { fetchRequest.fetchLimit = 10; })]];
|
|
||||||
|
|
||||||
XCTAssertNotNil(controller);
|
|
||||||
XCTAssertEqualObjects(controller.fetchRequest.entity.managedObjectClassName, [[TestEntity1 class] description]);
|
|
||||||
XCTAssertEqualObjects(controller.sectionNameKeyPath, CSKeyPath(TestEntity1, testString));
|
|
||||||
XCTAssertEqualObjects(controller.fetchRequest.predicate,
|
|
||||||
CSWhereFormat(@"%K > %d", CSKeyPath(TestEntity1, testEntityID), 100).predicate);
|
|
||||||
XCTAssertEqualObjects(controller.fetchRequest.sortDescriptors,
|
|
||||||
CSOrderByKeys(CSSortAscending(CSKeyPath(TestEntity1, testString)), nil).sortDescriptors);
|
|
||||||
XCTAssertEqual(controller.fetchRequest.fetchLimit, 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// ConvenienceTests.swift
|
// ConvenienceTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -29,7 +29,7 @@ import CoreStore
|
|||||||
|
|
||||||
// MARK: - ConvenienceTests
|
// MARK: - ConvenienceTests
|
||||||
|
|
||||||
@available(OSX 10.12, *)
|
@available(macOS 10.12, *)
|
||||||
class ConvenienceTests: BaseTestCase {
|
class ConvenienceTests: BaseTestCase {
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
@@ -40,8 +40,8 @@ class ConvenienceTests: BaseTestCase {
|
|||||||
let controller = stack.createFetchedResultsController(
|
let controller = stack.createFetchedResultsController(
|
||||||
From<TestEntity1>(),
|
From<TestEntity1>(),
|
||||||
SectionBy(#keyPath(TestEntity1.testString)),
|
SectionBy(#keyPath(TestEntity1.testString)),
|
||||||
Where("%@ > %d", #keyPath(TestEntity1.testEntityID), 100),
|
Where<TestEntity1>("%@ > %d", #keyPath(TestEntity1.testEntityID), 100),
|
||||||
OrderBy(.ascending(#keyPath(TestEntity1.testString))),
|
OrderBy<TestEntity1>(.ascending(#keyPath(TestEntity1.testString))),
|
||||||
Tweak { $0.fetchLimit = 10 }
|
Tweak { $0.fetchLimit = 10 }
|
||||||
)
|
)
|
||||||
XCTAssertEqual(controller.managedObjectContext, stack.mainContext)
|
XCTAssertEqual(controller.managedObjectContext, stack.mainContext)
|
||||||
@@ -49,11 +49,11 @@ class ConvenienceTests: BaseTestCase {
|
|||||||
XCTAssertEqual(controller.sectionNameKeyPath, #keyPath(TestEntity1.testString))
|
XCTAssertEqual(controller.sectionNameKeyPath, #keyPath(TestEntity1.testString))
|
||||||
XCTAssertEqual(
|
XCTAssertEqual(
|
||||||
controller.fetchRequest.sortDescriptors!,
|
controller.fetchRequest.sortDescriptors!,
|
||||||
OrderBy(.ascending(#keyPath(TestEntity1.testString))).sortDescriptors
|
OrderBy<TestEntity1>(.ascending(#keyPath(TestEntity1.testString))).sortDescriptors
|
||||||
)
|
)
|
||||||
XCTAssertEqual(
|
XCTAssertEqual(
|
||||||
controller.fetchRequest.predicate,
|
controller.fetchRequest.predicate,
|
||||||
Where("%@ > %d", #keyPath(TestEntity1.testEntityID), 100).predicate
|
Where<TestEntity1>("%@ > %d", #keyPath(TestEntity1.testEntityID), 100).predicate
|
||||||
)
|
)
|
||||||
XCTAssertEqual(controller.fetchRequest.fetchLimit, 10)
|
XCTAssertEqual(controller.fetchRequest.fetchLimit, 10)
|
||||||
}
|
}
|
||||||
@@ -69,8 +69,8 @@ class ConvenienceTests: BaseTestCase {
|
|||||||
let controller = transaction.createFetchedResultsController(
|
let controller = transaction.createFetchedResultsController(
|
||||||
From<TestEntity1>(),
|
From<TestEntity1>(),
|
||||||
SectionBy(#keyPath(TestEntity1.testString)),
|
SectionBy(#keyPath(TestEntity1.testString)),
|
||||||
Where("%@ > %d", #keyPath(TestEntity1.testEntityID), 100),
|
Where<TestEntity1>("%@ > %d", #keyPath(TestEntity1.testEntityID), 100),
|
||||||
OrderBy(.ascending(#keyPath(TestEntity1.testString))),
|
OrderBy<TestEntity1>(.ascending(#keyPath(TestEntity1.testString))),
|
||||||
Tweak { $0.fetchLimit = 10 }
|
Tweak { $0.fetchLimit = 10 }
|
||||||
)
|
)
|
||||||
XCTAssertEqual(controller.managedObjectContext, transaction.context)
|
XCTAssertEqual(controller.managedObjectContext, transaction.context)
|
||||||
@@ -78,11 +78,11 @@ class ConvenienceTests: BaseTestCase {
|
|||||||
XCTAssertEqual(controller.sectionNameKeyPath, #keyPath(TestEntity1.testString))
|
XCTAssertEqual(controller.sectionNameKeyPath, #keyPath(TestEntity1.testString))
|
||||||
XCTAssertEqual(
|
XCTAssertEqual(
|
||||||
controller.fetchRequest.sortDescriptors!,
|
controller.fetchRequest.sortDescriptors!,
|
||||||
OrderBy(.ascending(#keyPath(TestEntity1.testString))).sortDescriptors
|
OrderBy<TestEntity1>(.ascending(#keyPath(TestEntity1.testString))).sortDescriptors
|
||||||
)
|
)
|
||||||
XCTAssertEqual(
|
XCTAssertEqual(
|
||||||
controller.fetchRequest.predicate,
|
controller.fetchRequest.predicate,
|
||||||
Where("%@ > %d", #keyPath(TestEntity1.testEntityID), 100).predicate
|
Where<TestEntity1>("%@ > %d", #keyPath(TestEntity1.testEntityID), 100).predicate
|
||||||
)
|
)
|
||||||
XCTAssertEqual(controller.fetchRequest.fetchLimit, 10)
|
XCTAssertEqual(controller.fetchRequest.fetchLimit, 10)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// DynamicModelTests.swift
|
// DynamicModelTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2017 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -28,32 +28,83 @@ import XCTest
|
|||||||
@testable
|
@testable
|
||||||
import CoreStore
|
import CoreStore
|
||||||
|
|
||||||
|
#if os(macOS)
|
||||||
|
typealias Color = NSColor
|
||||||
|
#else
|
||||||
|
|
||||||
|
typealias Color = UIColor
|
||||||
|
#endif
|
||||||
|
|
||||||
class Animal: CoreStoreObject {
|
class Animal: CoreStoreObject {
|
||||||
|
|
||||||
let species = Value.Required<String>("species", default: "Swift")
|
let species = Value.Required<String>("species", initial: "Swift")
|
||||||
let master = Relationship.ToOne<Person>("master")
|
let master = Relationship.ToOne<Person>("master")
|
||||||
let color = Transformable.Optional<UIColor>("color")
|
let color = Transformable.Optional<Color>("color")
|
||||||
}
|
}
|
||||||
|
|
||||||
class Dog: Animal {
|
class Dog: Animal {
|
||||||
|
|
||||||
let nickname = Value.Optional<String>("nickname")
|
let nickname = Value.Optional<String>("nickname")
|
||||||
let age = Value.Required<Int>("age", default: 1)
|
let age = Value.Required<Int>("age", initial: 1)
|
||||||
let friends = Relationship.ToManyOrdered<Dog>("friends")
|
let friends = Relationship.ToManyOrdered<Dog>("friends")
|
||||||
let friendedBy = Relationship.ToManyUnordered<Dog>("friendedBy", inverse: { $0.friends })
|
let friendedBy = Relationship.ToManyUnordered<Dog>("friendedBy", inverse: { $0.friends })
|
||||||
}
|
}
|
||||||
|
|
||||||
class Person: CoreStoreObject {
|
class Person: CoreStoreObject {
|
||||||
let title = Value.Required<String>("title", default: "Mr.")
|
|
||||||
|
let title = Value.Required<String>(
|
||||||
|
"title",
|
||||||
|
initial: "Mr.",
|
||||||
|
customSetter: Person.setTitle
|
||||||
|
)
|
||||||
|
|
||||||
let name = Value.Required<String>(
|
let name = Value.Required<String>(
|
||||||
"name",
|
"name",
|
||||||
customGetter: { (`self`, getValue) in
|
initial: "",
|
||||||
|
customSetter: Person.setName
|
||||||
return "\(self.title.value) \(getValue())"
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
let displayName = Value.Optional<String>(
|
||||||
|
"displayName",
|
||||||
|
isTransient: true,
|
||||||
|
customGetter: Person.getDisplayName(_:),
|
||||||
|
affectedByKeyPaths: Person.keyPathsAffectingDisplayName()
|
||||||
|
)
|
||||||
|
|
||||||
let pets = Relationship.ToManyUnordered<Animal>("pets", inverse: { $0.master })
|
let pets = Relationship.ToManyUnordered<Animal>("pets", inverse: { $0.master })
|
||||||
|
|
||||||
|
private static func setTitle(_ partialObject: PartialObject<Person>, _ newValue: String) {
|
||||||
|
|
||||||
|
partialObject.setPrimitiveValue(newValue, for: { $0.title })
|
||||||
|
partialObject.setPrimitiveValue(nil, for: { $0.displayName })
|
||||||
|
}
|
||||||
|
|
||||||
|
private static func setName(_ partialObject: PartialObject<Person>, _ newValue: String) {
|
||||||
|
|
||||||
|
partialObject.setPrimitiveValue(newValue, for: { $0.name })
|
||||||
|
partialObject.setPrimitiveValue(nil, for: { $0.displayName })
|
||||||
|
}
|
||||||
|
|
||||||
|
static func getDisplayName(_ partialObject: PartialObject<Person>) -> String? {
|
||||||
|
|
||||||
|
if let displayName = partialObject.primitiveValue(for: { $0.displayName }) {
|
||||||
|
|
||||||
|
return displayName
|
||||||
|
}
|
||||||
|
let title = partialObject.value(for: { $0.title })
|
||||||
|
let name = partialObject.value(for: { $0.name })
|
||||||
|
let displayName = "\(title) \(name)"
|
||||||
|
partialObject.setPrimitiveValue(displayName, for: { $0.displayName })
|
||||||
|
return displayName
|
||||||
|
}
|
||||||
|
|
||||||
|
static func keyPathsAffectingDisplayName() -> Set<String> {
|
||||||
|
|
||||||
|
return [
|
||||||
|
String(keyPath: \Person.title),
|
||||||
|
String(keyPath: \Person.name)
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -61,7 +112,8 @@ class Person: CoreStoreObject {
|
|||||||
|
|
||||||
class DynamicModelTests: BaseTestDataTestCase {
|
class DynamicModelTests: BaseTestDataTestCase {
|
||||||
|
|
||||||
func testDynamicModels_CanBeDeclaredCorrectly() {
|
@objc
|
||||||
|
dynamic func test_ThatDynamicModels_CanBeDeclaredCorrectly() {
|
||||||
|
|
||||||
let dataStack = DataStack(
|
let dataStack = DataStack(
|
||||||
CoreStoreSchema(
|
CoreStoreSchema(
|
||||||
@@ -80,17 +132,20 @@ class DynamicModelTests: BaseTestDataTestCase {
|
|||||||
)
|
)
|
||||||
self.prepareStack(dataStack, configurations: [nil]) { (stack) in
|
self.prepareStack(dataStack, configurations: [nil]) { (stack) in
|
||||||
|
|
||||||
let k1 = Animal.keyPath({ $0.species })
|
let k1 = String(keyPath: \Animal.species)
|
||||||
XCTAssertEqual(k1, "species")
|
XCTAssertEqual(k1, "species")
|
||||||
|
|
||||||
let k2 = Dog.keyPath({ $0.species })
|
let k2 = String(keyPath: \Dog.species)
|
||||||
XCTAssertEqual(k2, "species")
|
XCTAssertEqual(k2, "species")
|
||||||
|
|
||||||
let k3 = Dog.keyPath({ $0.nickname })
|
let k3 = String(keyPath: \Dog.nickname)
|
||||||
XCTAssertEqual(k3, "nickname")
|
XCTAssertEqual(k3, "nickname")
|
||||||
|
|
||||||
let updateDone = self.expectation(description: "update-done")
|
let updateDone = self.expectation(description: "update-done")
|
||||||
let fetchDone = self.expectation(description: "fetch-done")
|
let fetchDone = self.expectation(description: "fetch-done")
|
||||||
|
let willSetPriorObserverDone = self.expectation(description: "willSet-observe-prior-done")
|
||||||
|
let willSetNotPriorObserverDone = self.expectation(description: "willSet-observe-notPrior-done")
|
||||||
|
let didSetObserverDone = self.expectation(description: "didSet-observe-done")
|
||||||
stack.perform(
|
stack.perform(
|
||||||
asynchronous: { (transaction) in
|
asynchronous: { (transaction) in
|
||||||
|
|
||||||
@@ -102,15 +157,48 @@ class DynamicModelTests: BaseTestDataTestCase {
|
|||||||
XCTAssertEqual(animal.species.value, "Sparrow")
|
XCTAssertEqual(animal.species.value, "Sparrow")
|
||||||
|
|
||||||
animal.color .= .yellow
|
animal.color .= .yellow
|
||||||
XCTAssertEqual(animal.color.value, UIColor.yellow)
|
XCTAssertEqual(animal.color.value, Color.yellow)
|
||||||
|
|
||||||
let dog = transaction.create(Into<Dog>())
|
let dog = transaction.create(Into<Dog>())
|
||||||
XCTAssertEqual(dog.species.value, "Swift")
|
XCTAssertEqual(dog.species.value, "Swift")
|
||||||
XCTAssertEqual(dog.nickname.value, nil)
|
XCTAssertEqual(dog.nickname.value, nil)
|
||||||
XCTAssertEqual(dog.age.value, 1)
|
XCTAssertEqual(dog.age.value, 1)
|
||||||
|
|
||||||
|
let didSetObserver = dog.species.observe(options: [.new, .old]) { (object, change) in
|
||||||
|
|
||||||
|
XCTAssertEqual(object, dog)
|
||||||
|
XCTAssertEqual(change.kind, .setting)
|
||||||
|
XCTAssertEqual(change.newValue, "Dog")
|
||||||
|
XCTAssertEqual(change.oldValue, "Swift")
|
||||||
|
XCTAssertFalse(change.isPrior)
|
||||||
|
XCTAssertEqual(object.species.value, "Dog")
|
||||||
|
didSetObserverDone.fulfill()
|
||||||
|
}
|
||||||
|
let willSetObserver = dog.species.observe(options: [.new, .old, .prior]) { (object, change) in
|
||||||
|
|
||||||
|
XCTAssertEqual(object, dog)
|
||||||
|
XCTAssertEqual(change.kind, .setting)
|
||||||
|
XCTAssertEqual(change.oldValue, "Swift")
|
||||||
|
|
||||||
|
if change.isPrior {
|
||||||
|
|
||||||
|
XCTAssertNil(change.newValue)
|
||||||
|
XCTAssertEqual(object.species.value, "Swift")
|
||||||
|
willSetPriorObserverDone.fulfill()
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
XCTAssertEqual(change.newValue, "Dog")
|
||||||
|
XCTAssertEqual(object.species.value, "Dog")
|
||||||
|
willSetNotPriorObserverDone.fulfill()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dog.species .= "Dog"
|
dog.species .= "Dog"
|
||||||
XCTAssertEqual(dog.species.value, "Dog")
|
XCTAssertEqual(dog.species.value, "Dog")
|
||||||
|
|
||||||
|
didSetObserver.invalidate()
|
||||||
|
willSetObserver.invalidate()
|
||||||
|
|
||||||
dog.nickname .= "Spot"
|
dog.nickname .= "Spot"
|
||||||
XCTAssertEqual(dog.nickname.value, "Spot")
|
XCTAssertEqual(dog.nickname.value, "Spot")
|
||||||
@@ -118,11 +206,25 @@ class DynamicModelTests: BaseTestDataTestCase {
|
|||||||
let person = transaction.create(Into<Person>())
|
let person = transaction.create(Into<Person>())
|
||||||
XCTAssertTrue(person.pets.value.isEmpty)
|
XCTAssertTrue(person.pets.value.isEmpty)
|
||||||
|
|
||||||
|
XCTAssertEqual(
|
||||||
|
cs_dynamicType(of: person.rawObject!).keyPathsForValuesAffectingValue(forKey: "displayName"),
|
||||||
|
["title", "name"]
|
||||||
|
)
|
||||||
|
|
||||||
|
person.name .= "Joe"
|
||||||
|
|
||||||
|
XCTAssertEqual(person.rawObject!.value(forKey: "name") as! String?, "Joe")
|
||||||
|
XCTAssertEqual(person.rawObject!.value(forKey: "displayName") as! String?, "Mr. Joe")
|
||||||
|
|
||||||
|
person.rawObject!.setValue("AAAA", forKey: "displayName")
|
||||||
|
XCTAssertEqual(person.rawObject!.value(forKey: "displayName") as! String?, "AAAA")
|
||||||
|
|
||||||
person.name .= "John"
|
person.name .= "John"
|
||||||
XCTAssertEqual(person.name.value, "Mr. John") // Custom getter
|
XCTAssertEqual(person.name.value, "John")
|
||||||
|
XCTAssertEqual(person.displayName.value, "Mr. John") // Custom getter
|
||||||
|
|
||||||
person.title .= "Sir"
|
person.title .= "Sir"
|
||||||
XCTAssertEqual(person.name.value, "Sir John")
|
XCTAssertEqual(person.displayName.value, "Sir John")
|
||||||
|
|
||||||
person.pets.value.insert(dog)
|
person.pets.value.insert(dog)
|
||||||
XCTAssertEqual(person.pets.count, 1)
|
XCTAssertEqual(person.pets.count, 1)
|
||||||
@@ -131,7 +233,7 @@ class DynamicModelTests: BaseTestDataTestCase {
|
|||||||
XCTAssertEqual(dog.master.value, person)
|
XCTAssertEqual(dog.master.value, person)
|
||||||
XCTAssertEqual(dog.master.value?.pets.value.first, dog)
|
XCTAssertEqual(dog.master.value?.pets.value.first, dog)
|
||||||
},
|
},
|
||||||
success: {
|
success: { _ in
|
||||||
|
|
||||||
updateDone.fulfill()
|
updateDone.fulfill()
|
||||||
},
|
},
|
||||||
@@ -143,32 +245,64 @@ class DynamicModelTests: BaseTestDataTestCase {
|
|||||||
stack.perform(
|
stack.perform(
|
||||||
asynchronous: { (transaction) in
|
asynchronous: { (transaction) in
|
||||||
|
|
||||||
let p1 = Animal.where({ $0.species == "Sparrow" })
|
let p1 = Where<Animal>({ $0.species == "Sparrow" })
|
||||||
XCTAssertEqual(p1.predicate, NSPredicate(format: "%K == %@", "species", "Sparrow"))
|
XCTAssertEqual(p1.predicate, NSPredicate(format: "%K == %@", "species", "Sparrow"))
|
||||||
|
|
||||||
let bird = transaction.fetchOne(From<Animal>(), p1)
|
let bird = try transaction.fetchOne(From<Animal>(), p1)
|
||||||
XCTAssertNotNil(bird)
|
XCTAssertNotNil(bird)
|
||||||
XCTAssertEqual(bird!.species.value, "Sparrow")
|
XCTAssertEqual(bird!.species.value, "Sparrow")
|
||||||
|
|
||||||
let p2 = Dog.where({ $0.nickname == "Spot" })
|
let p2 = Where<Dog>({ $0.nickname == "Spot" })
|
||||||
XCTAssertEqual(p2.predicate, NSPredicate(format: "%K == %@", "nickname", "Spot"))
|
XCTAssertEqual(p2.predicate, NSPredicate(format: "%K == %@", "nickname", "Spot"))
|
||||||
|
|
||||||
let dog = transaction.fetchOne(From<Dog>(), p2)
|
let dog = try transaction.fetchOne(From<Dog>().where(\.nickname == "Spot"))
|
||||||
XCTAssertNotNil(dog)
|
XCTAssertNotNil(dog)
|
||||||
XCTAssertEqual(dog!.nickname.value, "Spot")
|
XCTAssertEqual(dog!.nickname.value, "Spot")
|
||||||
XCTAssertEqual(dog!.species.value, "Dog")
|
XCTAssertEqual(dog!.species.value, "Dog")
|
||||||
|
|
||||||
let person = transaction.fetchOne(From<Person>())
|
let person = try transaction.fetchOne(From<Person>())
|
||||||
XCTAssertNotNil(person)
|
XCTAssertNotNil(person)
|
||||||
XCTAssertEqual(person!.pets.value.first, dog)
|
XCTAssertEqual(person!.pets.value.first, dog)
|
||||||
|
|
||||||
let p3 = Dog.where({ $0.age == 10 })
|
let p3 = Where<Dog>({ $0.age == 10 })
|
||||||
XCTAssertEqual(p3.predicate, NSPredicate(format: "%K == %d", "age", 10))
|
XCTAssertEqual(p3.predicate, NSPredicate(format: "%K == %d", "age", 10))
|
||||||
|
|
||||||
|
let totalAge = try transaction.queryValue(From<Dog>().select(Int.self, .sum(\Dog.age)))
|
||||||
|
XCTAssertEqual(totalAge, 1)
|
||||||
|
|
||||||
|
_ = try transaction.fetchAll(
|
||||||
|
From<Dog>()
|
||||||
|
.where(\Animal.species == "Dog" && \.age == 10)
|
||||||
|
)
|
||||||
|
_ = try transaction.fetchAll(
|
||||||
|
From<Dog>()
|
||||||
|
.where(\.age == 10 && \Animal.species == "Dog")
|
||||||
|
.orderBy(.ascending({ $0.species }))
|
||||||
|
)
|
||||||
|
_ = try transaction.fetchAll(
|
||||||
|
From<Dog>(),
|
||||||
|
Where<Dog>({ $0.age > 10 && $0.age <= 15 })
|
||||||
|
)
|
||||||
|
_ = try transaction.fetchAll(
|
||||||
|
From<Dog>(),
|
||||||
|
Where<Dog>({ $0.species == "Dog" && $0.age == 10 })
|
||||||
|
)
|
||||||
|
_ = try transaction.fetchAll(
|
||||||
|
From<Dog>(),
|
||||||
|
Where<Dog>({ $0.age == 10 && $0.species == "Dog" })
|
||||||
|
)
|
||||||
|
_ = try transaction.fetchAll(
|
||||||
|
From<Dog>(),
|
||||||
|
Where<Dog>({ $0.age > 10 && $0.age <= 15 })
|
||||||
|
)
|
||||||
|
_ = try transaction.fetchAll(
|
||||||
|
From<Dog>(),
|
||||||
|
(\Dog.age > 10 && \Dog.age <= 15)
|
||||||
|
)
|
||||||
},
|
},
|
||||||
success: {
|
success: { _ in
|
||||||
|
|
||||||
fetchDone.fulfill()
|
fetchDone.fulfill()
|
||||||
withExtendedLifetime(stack, {})
|
|
||||||
},
|
},
|
||||||
failure: { _ in
|
failure: { _ in
|
||||||
|
|
||||||
@@ -179,6 +313,13 @@ class DynamicModelTests: BaseTestDataTestCase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc
|
||||||
|
dynamic func test_ThatDynamicModelKeyPaths_CanBeCreated() {
|
||||||
|
|
||||||
|
XCTAssertEqual(String(keyPath: \Animal.species), "species")
|
||||||
|
XCTAssertEqual(String(keyPath: \Dog.species), "species")
|
||||||
|
}
|
||||||
|
|
||||||
@nonobjc
|
@nonobjc
|
||||||
func prepareStack(_ dataStack: DataStack, configurations: [ModelConfiguration] = [nil], _ closure: (_ dataStack: DataStack) -> Void) {
|
func prepareStack(_ dataStack: DataStack, configurations: [ModelConfiguration] = [nil], _ closure: (_ dataStack: DataStack) -> Void) {
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// ErrorTests.swift
|
// ErrorTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -86,8 +86,10 @@ final class ErrorTests: XCTestCase {
|
|||||||
let dummyURL = URL(string: "file:///test1/test2.sqlite")!
|
let dummyURL = URL(string: "file:///test1/test2.sqlite")!
|
||||||
|
|
||||||
let schemaHistory = SchemaHistory(
|
let schemaHistory = SchemaHistory(
|
||||||
modelName: "Model",
|
XcodeDataModelSchema.from(
|
||||||
bundle: Bundle(for: type(of: self))
|
modelName: "Model",
|
||||||
|
bundle: Bundle(for: type(of: self))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
let version = "1.0.0"
|
let version = "1.0.0"
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@
|
|||||||
// FromTests.swift
|
// FromTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -75,8 +75,7 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity1>()
|
let from = From<TestEntity1>()
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertTrue(storesFound)
|
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -90,11 +89,11 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity1>("Config1")
|
let from = From<TestEntity1>("Config1")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = self.expectLogger([.logWarning]) {
|
let storesFound: Void? = try? self.expectLogger([.logError]) {
|
||||||
|
|
||||||
from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertFalse(storesFound)
|
XCTAssertNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -116,8 +115,8 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity1>()
|
let from = From<TestEntity1>()
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertTrue(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -131,8 +130,8 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity1>("Config1")
|
let from = From<TestEntity1>("Config1")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertTrue(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -146,11 +145,11 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity1>("Config2")
|
let from = From<TestEntity1>("Config2")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = self.expectLogger([.logWarning]) {
|
let storesFound: Void? = try? self.expectLogger([.logError]) {
|
||||||
|
|
||||||
from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertFalse(storesFound)
|
XCTAssertNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -164,11 +163,11 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity2>()
|
let from = From<TestEntity2>()
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = self.expectLogger([.logWarning]) {
|
let storesFound: Void? = try? self.expectLogger([.logError]) {
|
||||||
|
|
||||||
from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertFalse(storesFound)
|
XCTAssertNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -182,11 +181,11 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity2>("Config1")
|
let from = From<TestEntity2>("Config1")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = self.expectLogger([.logWarning]) {
|
let storesFound: Void? = try? self.expectLogger([.logError]) {
|
||||||
|
|
||||||
from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertFalse(storesFound)
|
XCTAssertNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -200,11 +199,11 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity2>("Config2")
|
let from = From<TestEntity2>("Config2")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = self.expectLogger([.logWarning]) {
|
let storesFound: Void? = try? self.expectLogger([.logError]) {
|
||||||
|
|
||||||
from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertFalse(storesFound)
|
XCTAssertNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -226,8 +225,8 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity1>()
|
let from = From<TestEntity1>()
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertTrue(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -241,8 +240,8 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity1>("Config1")
|
let from = From<TestEntity1>("Config1")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertTrue(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -256,11 +255,11 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity1>("Config2")
|
let from = From<TestEntity1>("Config2")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = self.expectLogger([.logWarning]) {
|
let storesFound: Void? = try? self.expectLogger([.logError]) {
|
||||||
|
|
||||||
from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertFalse(storesFound)
|
XCTAssertNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -274,8 +273,8 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity2>()
|
let from = From<TestEntity2>()
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertTrue(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -289,11 +288,11 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity2>("Config1")
|
let from = From<TestEntity2>("Config1")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = self.expectLogger([.logWarning]) {
|
let storesFound: Void? = try? self.expectLogger([.logError]) {
|
||||||
|
|
||||||
from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertFalse(storesFound)
|
XCTAssertNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -307,11 +306,11 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity2>("Config2")
|
let from = From<TestEntity2>("Config2")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = self.expectLogger([.logWarning]) {
|
let storesFound: Void? = try? self.expectLogger([.logError]) {
|
||||||
|
|
||||||
from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertFalse(storesFound)
|
XCTAssertNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -333,8 +332,8 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity1>()
|
let from = From<TestEntity1>()
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertTrue(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -348,8 +347,8 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity1>("Config1")
|
let from = From<TestEntity1>("Config1")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertTrue(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -363,11 +362,11 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity1>("Config2")
|
let from = From<TestEntity1>("Config2")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = self.expectLogger([.logWarning]) {
|
let storesFound: Void? = try? self.expectLogger([.logError]) {
|
||||||
|
|
||||||
from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertFalse(storesFound)
|
XCTAssertNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -381,8 +380,8 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity2>()
|
let from = From<TestEntity2>()
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertTrue(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -396,11 +395,11 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity2>("Config1")
|
let from = From<TestEntity2>("Config1")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = self.expectLogger([.logWarning]) {
|
let storesFound: Void? = try? self.expectLogger([.logError]) {
|
||||||
|
|
||||||
from.applyToFetchRequest(request, context: dataStack.mainContext)
|
try from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
}
|
}
|
||||||
XCTAssertFalse(storesFound)
|
XCTAssertNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
@@ -414,8 +413,8 @@ final class FromTests: BaseTestCase {
|
|||||||
let from = From<TestEntity2>("Config2")
|
let from = From<TestEntity2>("Config2")
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
let storesFound = from.applyToFetchRequest(request, context: dataStack.mainContext)
|
let storesFound: Void? = try? from.applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
XCTAssertTrue(storesFound)
|
XCTAssertNotNil(storesFound)
|
||||||
XCTAssertNotNil(request.entity)
|
XCTAssertNotNil(request.entity)
|
||||||
XCTAssertNotNil(request.safeAffectedStores)
|
XCTAssertNotNil(request.safeAffectedStores)
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// GroupByTests.swift
|
// GroupByTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -38,14 +38,14 @@ final class GroupByTests: BaseTestCase {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let groupBy = GroupBy()
|
let groupBy = GroupBy<NSManagedObject>()
|
||||||
XCTAssertEqual(groupBy, GroupBy([] as [String]))
|
XCTAssertEqual(groupBy, GroupBy([] as [String]))
|
||||||
XCTAssertNotEqual(groupBy, GroupBy("key"))
|
XCTAssertNotEqual(groupBy, GroupBy("key"))
|
||||||
XCTAssertTrue(groupBy.keyPaths.isEmpty)
|
XCTAssertTrue(groupBy.keyPaths.isEmpty)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let groupBy = GroupBy("key1")
|
let groupBy = GroupBy<NSManagedObject>("key1")
|
||||||
XCTAssertEqual(groupBy, GroupBy("key1"))
|
XCTAssertEqual(groupBy, GroupBy("key1"))
|
||||||
XCTAssertEqual(groupBy, GroupBy(["key1"]))
|
XCTAssertEqual(groupBy, GroupBy(["key1"]))
|
||||||
XCTAssertNotEqual(groupBy, GroupBy("key2"))
|
XCTAssertNotEqual(groupBy, GroupBy("key2"))
|
||||||
@@ -53,7 +53,7 @@ final class GroupByTests: BaseTestCase {
|
|||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let groupBy = GroupBy("key1", "key2")
|
let groupBy = GroupBy<NSManagedObject>("key1", "key2")
|
||||||
XCTAssertEqual(groupBy, GroupBy("key1", "key2"))
|
XCTAssertEqual(groupBy, GroupBy("key1", "key2"))
|
||||||
XCTAssertEqual(groupBy, GroupBy(["key1", "key2"]))
|
XCTAssertEqual(groupBy, GroupBy(["key1", "key2"]))
|
||||||
XCTAssertNotEqual(groupBy, GroupBy("key2", "key1"))
|
XCTAssertNotEqual(groupBy, GroupBy("key2", "key1"))
|
||||||
@@ -66,10 +66,10 @@ final class GroupByTests: BaseTestCase {
|
|||||||
|
|
||||||
self.prepareStack { (dataStack) in
|
self.prepareStack { (dataStack) in
|
||||||
|
|
||||||
let groupBy = GroupBy(#keyPath(TestEntity1.testString))
|
let groupBy = GroupBy<NSManagedObject>(#keyPath(TestEntity1.testString))
|
||||||
|
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
_ = From<TestEntity1>().applyToFetchRequest(request, context: dataStack.mainContext)
|
try From<TestEntity1>().applyToFetchRequest(request, context: dataStack.mainContext)
|
||||||
groupBy.applyToFetchRequest(request)
|
groupBy.applyToFetchRequest(request)
|
||||||
|
|
||||||
XCTAssertNotNil(request.propertiesToGroupBy)
|
XCTAssertNotNil(request.propertiesToGroupBy)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// ImportTests.swift
|
// ImportTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -36,33 +36,33 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
@objc
|
@objc
|
||||||
dynamic func test_ThatAttributeProtocols_BehaveCorrectly() {
|
dynamic func test_ThatAttributeProtocols_BehaveCorrectly() {
|
||||||
|
|
||||||
XCTAssertEqual(NSNumber.cs_fromImportableNativeType(NSNumber(value: true))?.boolValue, true)
|
XCTAssertEqual(NSNumber.cs_fromQueryableNativeType(NSNumber(value: true))?.boolValue, true)
|
||||||
XCTAssertEqual(NSNumber.cs_fromImportableNativeType(NSNumber(value: Int16.max))?.int16Value, Int16.max)
|
XCTAssertEqual(NSNumber.cs_fromQueryableNativeType(NSNumber(value: Int16.max))?.int16Value, Int16.max)
|
||||||
XCTAssertEqual(NSNumber.cs_fromImportableNativeType(NSNumber(value: Int32.max))?.int32Value, Int32.max)
|
XCTAssertEqual(NSNumber.cs_fromQueryableNativeType(NSNumber(value: Int32.max))?.int32Value, Int32.max)
|
||||||
XCTAssertEqual(NSNumber.cs_fromImportableNativeType(NSNumber(value: Int64.max))?.int64Value, Int64.max)
|
XCTAssertEqual(NSNumber.cs_fromQueryableNativeType(NSNumber(value: Int64.max))?.int64Value, Int64.max)
|
||||||
XCTAssertEqual(NSNumber.cs_fromImportableNativeType(NSNumber(value: MAXFLOAT))?.floatValue, MAXFLOAT)
|
XCTAssertEqual(NSNumber.cs_fromQueryableNativeType(NSNumber(value: MAXFLOAT))?.floatValue, MAXFLOAT)
|
||||||
XCTAssertEqual(NSNumber.cs_fromImportableNativeType(NSNumber(value: Double(MAXFLOAT)))?.doubleValue, Double(MAXFLOAT))
|
XCTAssertEqual(NSNumber.cs_fromQueryableNativeType(NSNumber(value: Double(MAXFLOAT)))?.doubleValue, Double(MAXFLOAT))
|
||||||
|
|
||||||
XCTAssertEqual(NSDecimalNumber.cs_fromImportableNativeType(NSDecimalNumber(string: "1"))?.boolValue, true)
|
XCTAssertEqual(NSDecimalNumber.cs_fromQueryableNativeType(NSDecimalNumber(string: "1"))?.boolValue, true)
|
||||||
XCTAssertEqual(NSDecimalNumber.cs_fromImportableNativeType(NSDecimalNumber(string: Int16.max.description))?.int16Value, Int16.max)
|
XCTAssertEqual(NSDecimalNumber.cs_fromQueryableNativeType(NSDecimalNumber(string: Int16.max.description))?.int16Value, Int16.max)
|
||||||
XCTAssertEqual(NSDecimalNumber.cs_fromImportableNativeType(NSDecimalNumber(string: Int32.max.description))?.int32Value, Int32.max)
|
XCTAssertEqual(NSDecimalNumber.cs_fromQueryableNativeType(NSDecimalNumber(string: Int32.max.description))?.int32Value, Int32.max)
|
||||||
XCTAssertEqual(NSDecimalNumber.cs_fromImportableNativeType(NSDecimalNumber(string: Int64.max.description))?.int64Value, Int64.max)
|
XCTAssertEqual(NSDecimalNumber.cs_fromQueryableNativeType(NSDecimalNumber(string: Int64.max.description))?.int64Value, Int64.max)
|
||||||
XCTAssertEqual(NSDecimalNumber.cs_fromImportableNativeType(NSDecimalNumber(string: MAXFLOAT.description))?.doubleValue, NSDecimalNumber(string: MAXFLOAT.description).doubleValue)
|
XCTAssertEqual(NSDecimalNumber.cs_fromQueryableNativeType(NSDecimalNumber(string: MAXFLOAT.description))?.doubleValue, NSDecimalNumber(string: MAXFLOAT.description).doubleValue)
|
||||||
XCTAssertEqual(NSDecimalNumber.cs_fromImportableNativeType(NSDecimalNumber(string: MAXFLOAT.description))?.floatValue, NSDecimalNumber(string: MAXFLOAT.description).floatValue)
|
XCTAssertEqual(NSDecimalNumber.cs_fromQueryableNativeType(NSDecimalNumber(string: MAXFLOAT.description))?.floatValue, NSDecimalNumber(string: MAXFLOAT.description).floatValue)
|
||||||
|
|
||||||
XCTAssertEqual(NSNumber.cs_fromImportableNativeType(NSDecimalNumber(string: "1"))?.boolValue, true)
|
XCTAssertEqual(NSNumber.cs_fromQueryableNativeType(NSDecimalNumber(string: "1"))?.boolValue, true)
|
||||||
XCTAssertEqual(NSNumber.cs_fromImportableNativeType(NSDecimalNumber(string: Int16.max.description))?.int16Value, Int16.max)
|
XCTAssertEqual(NSNumber.cs_fromQueryableNativeType(NSDecimalNumber(string: Int16.max.description))?.int16Value, Int16.max)
|
||||||
XCTAssertEqual(NSNumber.cs_fromImportableNativeType(NSDecimalNumber(string: Int32.max.description))?.int32Value, Int32.max)
|
XCTAssertEqual(NSNumber.cs_fromQueryableNativeType(NSDecimalNumber(string: Int32.max.description))?.int32Value, Int32.max)
|
||||||
XCTAssertEqual(NSNumber.cs_fromImportableNativeType(NSDecimalNumber(string: Int64.max.description))?.int64Value, Int64.max)
|
XCTAssertEqual(NSNumber.cs_fromQueryableNativeType(NSDecimalNumber(string: Int64.max.description))?.int64Value, Int64.max)
|
||||||
XCTAssertEqual(NSNumber.cs_fromImportableNativeType(NSDecimalNumber(string: MAXFLOAT.description))?.doubleValue, NSDecimalNumber(string: MAXFLOAT.description).doubleValue)
|
XCTAssertEqual(NSNumber.cs_fromQueryableNativeType(NSDecimalNumber(string: MAXFLOAT.description))?.doubleValue, NSDecimalNumber(string: MAXFLOAT.description).doubleValue)
|
||||||
XCTAssertEqual(NSNumber.cs_fromImportableNativeType(NSDecimalNumber(string: MAXFLOAT.description))?.floatValue, NSDecimalNumber(string: MAXFLOAT.description).floatValue)
|
XCTAssertEqual(NSNumber.cs_fromQueryableNativeType(NSDecimalNumber(string: MAXFLOAT.description))?.floatValue, NSDecimalNumber(string: MAXFLOAT.description).floatValue)
|
||||||
|
|
||||||
XCTAssertNil(NSDecimalNumber.cs_fromImportableNativeType(NSNumber(value: true)))
|
XCTAssertNil(NSDecimalNumber.cs_fromQueryableNativeType(NSNumber(value: true)))
|
||||||
XCTAssertNil(NSDecimalNumber.cs_fromImportableNativeType(NSNumber(value: Int16.max)))
|
XCTAssertNil(NSDecimalNumber.cs_fromQueryableNativeType(NSNumber(value: Int16.max)))
|
||||||
XCTAssertNil(NSDecimalNumber.cs_fromImportableNativeType(NSNumber(value: Int32.max)))
|
XCTAssertNil(NSDecimalNumber.cs_fromQueryableNativeType(NSNumber(value: Int32.max)))
|
||||||
XCTAssertNil(NSDecimalNumber.cs_fromImportableNativeType(NSNumber(value: Int64.max)))
|
XCTAssertNil(NSDecimalNumber.cs_fromQueryableNativeType(NSNumber(value: Int64.max)))
|
||||||
XCTAssertNil(NSDecimalNumber.cs_fromImportableNativeType(NSNumber(value: MAXFLOAT)))
|
XCTAssertNil(NSDecimalNumber.cs_fromQueryableNativeType(NSNumber(value: MAXFLOAT)))
|
||||||
XCTAssertNil(NSDecimalNumber.cs_fromImportableNativeType(NSNumber(value: Double(MAXFLOAT))))
|
XCTAssertNil(NSDecimalNumber.cs_fromQueryableNativeType(NSNumber(value: Double(MAXFLOAT))))
|
||||||
|
|
||||||
XCTAssertEqual(true.cs_toQueryableNativeType(), NSNumber(value: true))
|
XCTAssertEqual(true.cs_toQueryableNativeType(), NSNumber(value: true))
|
||||||
XCTAssertEqual(Int16.max.cs_toQueryableNativeType(), NSNumber(value: Int16.max))
|
XCTAssertEqual(Int16.max.cs_toQueryableNativeType(), NSNumber(value: Int16.max))
|
||||||
@@ -95,7 +95,7 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
XCTAssertNil(object)
|
XCTAssertNil(object)
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 0)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 0)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -103,7 +103,7 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
}
|
}
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>()), 0)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>()), 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,9 +137,9 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
catch _ as TestInsertError {
|
catch _ as TestInsertError {
|
||||||
|
|
||||||
errorExpectation.fulfill()
|
errorExpectation.fulfill()
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 1)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 1)
|
||||||
|
|
||||||
let object = transaction.fetchOne(From<TestEntity1>())
|
let object = try transaction.fetchOne(From<TestEntity1>())
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertNil(object?.testEntityID)
|
XCTAssertNil(object?.testEntityID)
|
||||||
XCTAssertNil(object?.testBoolean)
|
XCTAssertNil(object?.testBoolean)
|
||||||
@@ -182,7 +182,7 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 1)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 1)
|
||||||
XCTAssertNil(object?.testEntityID)
|
XCTAssertNil(object?.testEntityID)
|
||||||
XCTAssertEqual(object?.testBoolean, NSNumber(value: true))
|
XCTAssertEqual(object?.testBoolean, NSNumber(value: true))
|
||||||
XCTAssertEqual(object?.testNumber, NSNumber(value: 1))
|
XCTAssertEqual(object?.testNumber, NSNumber(value: 1))
|
||||||
@@ -202,7 +202,7 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
#keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-02T00:00:00Z")!
|
#keyPath(TestEntity1.testDate): self.dateFormatter.date(from: "2000-01-02T00:00:00Z")!
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 1)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 1)
|
||||||
XCTAssertNil(object?.testEntityID)
|
XCTAssertNil(object?.testEntityID)
|
||||||
XCTAssertEqual(object?.testBoolean, NSNumber(value: false))
|
XCTAssertEqual(object?.testBoolean, NSNumber(value: false))
|
||||||
XCTAssertEqual(object?.testNumber, NSNumber(value: 2))
|
XCTAssertEqual(object?.testNumber, NSNumber(value: 2))
|
||||||
@@ -254,7 +254,7 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
sourceArray: sourceArray
|
sourceArray: sourceArray
|
||||||
)
|
)
|
||||||
XCTAssertEqual(objects.count, 1)
|
XCTAssertEqual(objects.count, 1)
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 1)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 1)
|
||||||
|
|
||||||
let object = objects[0]
|
let object = objects[0]
|
||||||
let dictionary = sourceArray[1]
|
let dictionary = sourceArray[1]
|
||||||
@@ -316,9 +316,9 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
catch _ as TestInsertError {
|
catch _ as TestInsertError {
|
||||||
|
|
||||||
errorExpectation.fulfill()
|
errorExpectation.fulfill()
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 1)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 1)
|
||||||
|
|
||||||
let object = transaction.fetchOne(From<TestEntity1>())
|
let object = try transaction.fetchOne(From<TestEntity1>())
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertNil(object?.testEntityID)
|
XCTAssertNil(object?.testEntityID)
|
||||||
XCTAssertNil(object?.testBoolean)
|
XCTAssertNil(object?.testBoolean)
|
||||||
@@ -372,7 +372,7 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
sourceArray: sourceArray
|
sourceArray: sourceArray
|
||||||
)
|
)
|
||||||
XCTAssertEqual(objects.count, sourceArray.count)
|
XCTAssertEqual(objects.count, sourceArray.count)
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 2)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 2)
|
||||||
|
|
||||||
for i in 0 ..< sourceArray.count {
|
for i in 0 ..< sourceArray.count {
|
||||||
|
|
||||||
@@ -424,7 +424,7 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
XCTAssertNil(object)
|
XCTAssertNil(object)
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 5)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 5)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
@@ -442,20 +442,19 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
XCTAssertNil(object)
|
XCTAssertNil(object)
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 5)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 5)
|
||||||
|
|
||||||
let existingObjects = transaction.fetchAll(From<TestEntity1>(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 105))
|
let existingObjects = try transaction.fetchAll(From<TestEntity1>(), Where<TestEntity1>(#keyPath(TestEntity1.testEntityID), isEqualTo: 105))
|
||||||
XCTAssertNotNil(existingObjects)
|
XCTAssertEqual(existingObjects.count, 1)
|
||||||
XCTAssertEqual(existingObjects?.count, 1)
|
|
||||||
|
|
||||||
let existingObject = existingObjects?[0]
|
let existingObject = existingObjects[0]
|
||||||
XCTAssertEqual(existingObject?.testEntityID, NSNumber(value: 105))
|
XCTAssertEqual(existingObject.testEntityID, NSNumber(value: 105))
|
||||||
XCTAssertEqual(existingObject?.testBoolean, NSNumber(value: true))
|
XCTAssertEqual(existingObject.testBoolean, NSNumber(value: true))
|
||||||
XCTAssertEqual(existingObject?.testNumber, NSNumber(value: 5))
|
XCTAssertEqual(existingObject.testNumber, NSNumber(value: 5))
|
||||||
XCTAssertEqual(existingObject?.testDecimal, NSDecimalNumber(string: "5"))
|
XCTAssertEqual(existingObject.testDecimal, NSDecimalNumber(string: "5"))
|
||||||
XCTAssertEqual(existingObject?.testString, "nil:TestEntity1:5")
|
XCTAssertEqual(existingObject.testString, "nil:TestEntity1:5")
|
||||||
XCTAssertEqual(existingObject?.testData, ("nil:TestEntity1:5" as NSString).data(using: String.Encoding.utf8.rawValue)!)
|
XCTAssertEqual(existingObject.testData, ("nil:TestEntity1:5" as NSString).data(using: String.Encoding.utf8.rawValue)!)
|
||||||
XCTAssertEqual(existingObject?.testDate, self.dateFormatter.date(from: "2000-01-05T00:00:00Z")!)
|
XCTAssertEqual(existingObject.testDate, self.dateFormatter.date(from: "2000-01-05T00:00:00Z")!)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -504,7 +503,7 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
)
|
)
|
||||||
|
|
||||||
XCTAssertEqual(objects.count, 1)
|
XCTAssertEqual(objects.count, 1)
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 6)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 6)
|
||||||
|
|
||||||
let object = objects[0]
|
let object = objects[0]
|
||||||
let dictionary = sourceArray[1]
|
let dictionary = sourceArray[1]
|
||||||
@@ -565,7 +564,9 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
XCTAssertEqual(objects.count, 2)
|
XCTAssertEqual(objects.count, 2)
|
||||||
|
|
||||||
zip(objects, sourceArray)
|
zip(objects, sourceArray)
|
||||||
.forEach { object, dictionary in
|
.forEach {
|
||||||
|
|
||||||
|
let (object, dictionary) = $0
|
||||||
XCTAssertEqual(object.testEntityID, dictionary[(#keyPath(TestEntity1.testEntityID))] as? NSNumber)
|
XCTAssertEqual(object.testEntityID, dictionary[(#keyPath(TestEntity1.testEntityID))] as? NSNumber)
|
||||||
XCTAssertEqual(object.testBoolean, dictionary[(#keyPath(TestEntity1.testBoolean))] as? NSNumber)
|
XCTAssertEqual(object.testBoolean, dictionary[(#keyPath(TestEntity1.testBoolean))] as? NSNumber)
|
||||||
XCTAssertEqual(object.testNumber, dictionary[(#keyPath(TestEntity1.testNumber))] as? NSNumber)
|
XCTAssertEqual(object.testNumber, dictionary[(#keyPath(TestEntity1.testNumber))] as? NSNumber)
|
||||||
@@ -616,9 +617,9 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
catch _ as TestInsertError {
|
catch _ as TestInsertError {
|
||||||
|
|
||||||
errorExpectation.fulfill()
|
errorExpectation.fulfill()
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 6)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 6)
|
||||||
|
|
||||||
let object = transaction.fetchOne(From<TestEntity1>(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 106))
|
let object = try transaction.fetchOne(From<TestEntity1>(), Where<TestEntity1>(#keyPath(TestEntity1.testEntityID), isEqualTo: 106))
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 106))
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 106))
|
||||||
XCTAssertNil(object?.testBoolean)
|
XCTAssertNil(object?.testBoolean)
|
||||||
@@ -655,21 +656,19 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
catch _ as TestUpdateError {
|
catch _ as TestUpdateError {
|
||||||
|
|
||||||
errorExpectation.fulfill()
|
errorExpectation.fulfill()
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 6)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 6)
|
||||||
|
|
||||||
let existingObjects = transaction.fetchAll(From<TestEntity1>(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 105))
|
let existingObjects = try transaction.fetchAll(From<TestEntity1>(), Where<TestEntity1>(#keyPath(TestEntity1.testEntityID), isEqualTo: 105))
|
||||||
XCTAssertNotNil(existingObjects)
|
XCTAssertEqual(existingObjects.count, 1)
|
||||||
XCTAssertEqual(existingObjects?.count, 1)
|
|
||||||
|
|
||||||
let existingObject = existingObjects?[0]
|
let existingObject = existingObjects[0]
|
||||||
XCTAssertNotNil(existingObject)
|
XCTAssertEqual(existingObject.testEntityID, NSNumber(value: 105))
|
||||||
XCTAssertEqual(existingObject?.testEntityID, NSNumber(value: 105))
|
XCTAssertEqual(existingObject.testBoolean, NSNumber(value: true))
|
||||||
XCTAssertEqual(existingObject?.testBoolean, NSNumber(value: true))
|
XCTAssertEqual(existingObject.testNumber, NSNumber(value: 5))
|
||||||
XCTAssertEqual(existingObject?.testNumber, NSNumber(value: 5))
|
XCTAssertEqual(existingObject.testDecimal, NSDecimalNumber(string: "5"))
|
||||||
XCTAssertEqual(existingObject?.testDecimal, NSDecimalNumber(string: "5"))
|
XCTAssertEqual(existingObject.testString, "nil:TestEntity1:5")
|
||||||
XCTAssertEqual(existingObject?.testString, "nil:TestEntity1:5")
|
XCTAssertEqual(existingObject.testData, ("nil:TestEntity1:5" as NSString).data(using: String.Encoding.utf8.rawValue)!)
|
||||||
XCTAssertEqual(existingObject?.testData, ("nil:TestEntity1:5" as NSString).data(using: String.Encoding.utf8.rawValue)!)
|
XCTAssertEqual(existingObject.testDate, self.dateFormatter.date(from: "2000-01-05T00:00:00Z")!)
|
||||||
XCTAssertEqual(existingObject?.testDate, self.dateFormatter.date(from: "2000-01-05T00:00:00Z")!)
|
|
||||||
}
|
}
|
||||||
self.checkExpectationsImmediately()
|
self.checkExpectationsImmediately()
|
||||||
}
|
}
|
||||||
@@ -708,7 +707,7 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 6)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 6)
|
||||||
|
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 106))
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 106))
|
||||||
XCTAssertEqual(object?.testBoolean, NSNumber(value: true))
|
XCTAssertEqual(object?.testBoolean, NSNumber(value: true))
|
||||||
@@ -733,7 +732,7 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 6)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 6)
|
||||||
|
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 106))
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 106))
|
||||||
XCTAssertEqual(object?.testBoolean, NSNumber(value: false))
|
XCTAssertEqual(object?.testBoolean, NSNumber(value: false))
|
||||||
@@ -743,11 +742,10 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
XCTAssertEqual(object?.testData, ("nil:TestEntity1:7" as NSString).data(using: String.Encoding.utf8.rawValue)!)
|
XCTAssertEqual(object?.testData, ("nil:TestEntity1:7" as NSString).data(using: String.Encoding.utf8.rawValue)!)
|
||||||
XCTAssertEqual(object?.testDate, self.dateFormatter.date(from: "2000-01-07T00:00:00Z")!)
|
XCTAssertEqual(object?.testDate, self.dateFormatter.date(from: "2000-01-07T00:00:00Z")!)
|
||||||
|
|
||||||
let existingObjects = transaction.fetchAll(From<TestEntity1>(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 106))
|
let existingObjects = try transaction.fetchAll(From<TestEntity1>(), Where<TestEntity1>(#keyPath(TestEntity1.testEntityID), isEqualTo: 106))
|
||||||
XCTAssertNotNil(existingObjects)
|
XCTAssertEqual(existingObjects.count, 1)
|
||||||
XCTAssertEqual(existingObjects?.count, 1)
|
|
||||||
|
|
||||||
let existingObject = existingObjects?[0]
|
let existingObject = existingObjects[0]
|
||||||
XCTAssertEqual(existingObject, object)
|
XCTAssertEqual(existingObject, object)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -797,7 +795,7 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
sourceArray: sourceArray
|
sourceArray: sourceArray
|
||||||
)
|
)
|
||||||
XCTAssertEqual(objects.count, 1)
|
XCTAssertEqual(objects.count, 1)
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 6)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 6)
|
||||||
|
|
||||||
let object = objects[0]
|
let object = objects[0]
|
||||||
let dictionary = sourceArray[1]
|
let dictionary = sourceArray[1]
|
||||||
@@ -862,10 +860,10 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
catch _ as TestIDError {
|
catch _ as TestIDError {
|
||||||
|
|
||||||
errorExpectation.fulfill()
|
errorExpectation.fulfill()
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 5)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 5)
|
||||||
|
|
||||||
XCTAssertNil(transaction.fetchOne(From<TestEntity1>(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 106)))
|
XCTAssertNil(try transaction.fetchOne(From<TestEntity1>(), Where<TestEntity1>(#keyPath(TestEntity1.testEntityID), isEqualTo: 106)))
|
||||||
XCTAssertNil(transaction.fetchOne(From<TestEntity1>(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 107)))
|
XCTAssertNil(try transaction.fetchOne(From<TestEntity1>(), Where<TestEntity1>(#keyPath(TestEntity1.testEntityID), isEqualTo: 107)))
|
||||||
}
|
}
|
||||||
transaction.unsafeContext().reset()
|
transaction.unsafeContext().reset()
|
||||||
self.checkExpectationsImmediately()
|
self.checkExpectationsImmediately()
|
||||||
@@ -908,7 +906,7 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
|
|
||||||
errorExpectation.fulfill()
|
errorExpectation.fulfill()
|
||||||
|
|
||||||
let object = transaction.fetchOne(From<TestEntity1>(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 106))
|
let object = try transaction.fetchOne(From<TestEntity1>(), Where<TestEntity1>(#keyPath(TestEntity1.testEntityID), isEqualTo: 106))
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 106))
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 106))
|
||||||
XCTAssertNil(object?.testBoolean)
|
XCTAssertNil(object?.testBoolean)
|
||||||
@@ -949,9 +947,9 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
catch _ as TestUpdateError {
|
catch _ as TestUpdateError {
|
||||||
|
|
||||||
errorExpectation.fulfill()
|
errorExpectation.fulfill()
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 5)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 5)
|
||||||
|
|
||||||
let object = transaction.fetchOne(From<TestEntity1>(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 105))
|
let object = try transaction.fetchOne(From<TestEntity1>(), Where<TestEntity1>(#keyPath(TestEntity1.testEntityID), isEqualTo: 105))
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 105))
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 105))
|
||||||
XCTAssertEqual(object?.testBoolean, NSNumber(value: true))
|
XCTAssertEqual(object?.testBoolean, NSNumber(value: true))
|
||||||
@@ -961,11 +959,10 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
XCTAssertEqual(object?.testData, ("nil:TestEntity1:5" as NSString).data(using: String.Encoding.utf8.rawValue)!)
|
XCTAssertEqual(object?.testData, ("nil:TestEntity1:5" as NSString).data(using: String.Encoding.utf8.rawValue)!)
|
||||||
XCTAssertEqual(object?.testDate, self.dateFormatter.date(from: "2000-01-05T00:00:00Z")!)
|
XCTAssertEqual(object?.testDate, self.dateFormatter.date(from: "2000-01-05T00:00:00Z")!)
|
||||||
|
|
||||||
let existingObjects = transaction.fetchAll(From<TestEntity1>(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 105))
|
let existingObjects = try transaction.fetchAll(From<TestEntity1>(), Where<TestEntity1>(#keyPath(TestEntity1.testEntityID), isEqualTo: 105))
|
||||||
XCTAssertNotNil(existingObjects)
|
XCTAssertEqual(existingObjects.count, 1)
|
||||||
XCTAssertEqual(existingObjects?.count, 1)
|
|
||||||
|
|
||||||
let existingObject = existingObjects?[0]
|
let existingObject = existingObjects[0]
|
||||||
XCTAssertEqual(existingObject, object)
|
XCTAssertEqual(existingObject, object)
|
||||||
}
|
}
|
||||||
transaction.context.reset()
|
transaction.context.reset()
|
||||||
@@ -1016,7 +1013,7 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
sourceArray: sourceArray
|
sourceArray: sourceArray
|
||||||
)
|
)
|
||||||
XCTAssertEqual(objects.count, sourceArray.count)
|
XCTAssertEqual(objects.count, sourceArray.count)
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 6)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 6)
|
||||||
for i in 0 ..< sourceArray.count {
|
for i in 0 ..< sourceArray.count {
|
||||||
|
|
||||||
let object = objects[i]
|
let object = objects[i]
|
||||||
@@ -1030,11 +1027,10 @@ class ImportTests: BaseTestDataTestCase {
|
|||||||
XCTAssertEqual(object.testData, dictionary[(#keyPath(TestEntity1.testData))] as? Data)
|
XCTAssertEqual(object.testData, dictionary[(#keyPath(TestEntity1.testData))] as? Data)
|
||||||
XCTAssertEqual(object.testDate, dictionary[(#keyPath(TestEntity1.testDate))] as? Date)
|
XCTAssertEqual(object.testDate, dictionary[(#keyPath(TestEntity1.testDate))] as? Date)
|
||||||
}
|
}
|
||||||
let existingObjects = transaction.fetchAll(From<TestEntity1>(), Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 105))
|
let existingObjects = try transaction.fetchAll(From<TestEntity1>(), Where<TestEntity1>(#keyPath(TestEntity1.testEntityID), isEqualTo: 105))
|
||||||
XCTAssertNotNil(existingObjects)
|
XCTAssertEqual(existingObjects.count, 1)
|
||||||
XCTAssertEqual(existingObjects?.count, 1)
|
|
||||||
|
|
||||||
let existingObject = existingObjects?[0]
|
let existingObject = existingObjects[0]
|
||||||
XCTAssertEqual(existingObject, objects[0])
|
XCTAssertEqual(existingObject, objects[0])
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>BNDL</string>
|
<string>BNDL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.0</string>
|
<string>5.3.1</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// IntoTests.swift
|
// IntoTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// ListObserverTests.swift
|
// ListObserverTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -31,7 +31,7 @@ import CoreStore
|
|||||||
|
|
||||||
// MARK: - ListObserverTests
|
// MARK: - ListObserverTests
|
||||||
|
|
||||||
@available(OSX 10.12, *)
|
@available(macOS 10.12, *)
|
||||||
class ListObserverTests: BaseTestDataTestCase {
|
class ListObserverTests: BaseTestDataTestCase {
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
@@ -43,7 +43,7 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
let monitor = stack.monitorSectionedList(
|
let monitor = stack.monitorSectionedList(
|
||||||
From<TestEntity1>(),
|
From<TestEntity1>(),
|
||||||
SectionBy(#keyPath(TestEntity1.testBoolean)),
|
SectionBy(#keyPath(TestEntity1.testBoolean)),
|
||||||
OrderBy(.ascending(#keyPath(TestEntity1.testBoolean)), .ascending(#keyPath(TestEntity1.testEntityID)))
|
OrderBy<TestEntity1>(.ascending(#keyPath(TestEntity1.testBoolean)), .ascending(#keyPath(TestEntity1.testEntityID)))
|
||||||
)
|
)
|
||||||
monitor.addObserver(observer)
|
monitor.addObserver(observer)
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
var events = 0
|
var events = 0
|
||||||
|
|
||||||
let willChangeExpectation = self.expectation(
|
let willChangeExpectation = self.expectation(
|
||||||
forNotification: "listMonitorWillChange:",
|
forNotification: NSNotification.Name(rawValue: "listMonitorWillChange:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -68,7 +68,7 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
let didInsertSectionExpectation = self.expectation(
|
let didInsertSectionExpectation = self.expectation(
|
||||||
forNotification: "listMonitor:didInsertSection:toSectionIndex:",
|
forNotification: NSNotification.Name(rawValue: "listMonitor:didInsertSection:toSectionIndex:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
XCTAssertEqual(
|
XCTAssertEqual(
|
||||||
((note.userInfo as NSDictionary?) ?? [:]),
|
((note.userInfo as NSDictionary?) ?? [:]),
|
||||||
[
|
[
|
||||||
"sectionInfo": monitor.sectionInfoAtIndex(0),
|
"sectionInfo": monitor.sectionInfo(at: 0),
|
||||||
"sectionIndex": 0
|
"sectionIndex": 0
|
||||||
] as NSDictionary
|
] as NSDictionary
|
||||||
)
|
)
|
||||||
@@ -88,7 +88,7 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
let didInsertObjectExpectation = self.expectation(
|
let didInsertObjectExpectation = self.expectation(
|
||||||
forNotification: "listMonitor:didInsertObject:toIndexPath:",
|
forNotification: NSNotification.Name(rawValue: "listMonitor:didInsertObject:toIndexPath:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -120,7 +120,7 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
let didChangeExpectation = self.expectation(
|
let didChangeExpectation = self.expectation(
|
||||||
forNotification: "listMonitorDidChange:",
|
forNotification: NSNotification.Name(rawValue: "listMonitorDidChange:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -171,21 +171,21 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
let monitor = stack.monitorSectionedList(
|
let monitor = stack.monitorSectionedList(
|
||||||
From<TestEntity1>(),
|
From<TestEntity1>(),
|
||||||
SectionBy(#keyPath(TestEntity1.testBoolean)),
|
SectionBy(#keyPath(TestEntity1.testBoolean)),
|
||||||
OrderBy(.ascending(#keyPath(TestEntity1.testBoolean)), .ascending(#keyPath(TestEntity1.testEntityID)))
|
OrderBy<TestEntity1>(.ascending(#keyPath(TestEntity1.testBoolean)), .ascending(#keyPath(TestEntity1.testEntityID)))
|
||||||
)
|
)
|
||||||
monitor.addObserver(observer)
|
monitor.addObserver(observer)
|
||||||
|
|
||||||
XCTAssertTrue(monitor.hasSections())
|
XCTAssertTrue(monitor.hasSections())
|
||||||
XCTAssertEqual(monitor.numberOfSections(), 2)
|
XCTAssertEqual(monitor.numberOfSections(), 2)
|
||||||
XCTAssertTrue(monitor.hasObjects())
|
XCTAssertTrue(monitor.hasObjects())
|
||||||
XCTAssertTrue(monitor.hasObjectsInSection(0))
|
XCTAssertTrue(monitor.hasObjects(in: 0))
|
||||||
XCTAssertEqual(monitor.numberOfObjectsInSection(0), 2)
|
XCTAssertEqual(monitor.numberOfObjects(in: 0), 2)
|
||||||
XCTAssertEqual(monitor.numberOfObjectsInSection(1), 3)
|
XCTAssertEqual(monitor.numberOfObjects(in: 1), 3)
|
||||||
|
|
||||||
var events = 0
|
var events = 0
|
||||||
|
|
||||||
let willChangeExpectation = self.expectation(
|
let willChangeExpectation = self.expectation(
|
||||||
forNotification: "listMonitorWillChange:",
|
forNotification: NSNotification.Name(rawValue: "listMonitorWillChange:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -198,62 +198,60 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
return events == 0
|
return events == 0
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
for _ in 1 ... 2 {
|
|
||||||
|
let didUpdateObjectExpectation = self.expectation(
|
||||||
let didUpdateObjectExpectation = self.expectation(
|
forNotification: NSNotification.Name(rawValue: "listMonitor:didUpdateObject:atIndexPath:"),
|
||||||
forNotification: "listMonitor:didUpdateObject:atIndexPath:",
|
object: observer,
|
||||||
object: observer,
|
handler: { (note) -> Bool in
|
||||||
handler: { (note) -> Bool in
|
|
||||||
|
XCTAssert(events == 1 || events == 2)
|
||||||
|
|
||||||
|
let userInfo = note.userInfo
|
||||||
|
XCTAssertNotNil(userInfo)
|
||||||
|
XCTAssertEqual(
|
||||||
|
Set(userInfo?.keys.map({ $0 as! String }) ?? []),
|
||||||
|
["indexPath", "object"]
|
||||||
|
)
|
||||||
|
|
||||||
|
let indexPath = userInfo?["indexPath"] as? NSIndexPath
|
||||||
|
let object = userInfo?["object"] as? TestEntity1
|
||||||
|
|
||||||
|
switch object?.testEntityID {
|
||||||
|
|
||||||
XCTAssert(events == 1 || events == 2)
|
case NSNumber(value: 101)?:
|
||||||
|
XCTAssertEqual(indexPath?.index(atPosition: 0), 1)
|
||||||
|
XCTAssertEqual(indexPath?.index(atPosition: 1), 0)
|
||||||
|
|
||||||
let userInfo = note.userInfo
|
XCTAssertEqual(object?.testBoolean, NSNumber(value: true))
|
||||||
XCTAssertNotNil(userInfo)
|
XCTAssertEqual(object?.testNumber, NSNumber(value: 11))
|
||||||
XCTAssertEqual(
|
XCTAssertEqual(object?.testDecimal, NSDecimalNumber(string: "11"))
|
||||||
Set(userInfo?.keys.map({ $0 as! String }) ?? []),
|
XCTAssertEqual(object?.testString, "nil:TestEntity1:11")
|
||||||
["indexPath", "object"]
|
XCTAssertEqual(object?.testData, ("nil:TestEntity1:11" as NSString).data(using: String.Encoding.utf8.rawValue)!)
|
||||||
)
|
XCTAssertEqual(object?.testDate, self.dateFormatter.date(from: "2000-01-11T00:00:00Z")!)
|
||||||
|
|
||||||
let indexPath = userInfo?["indexPath"] as? NSIndexPath
|
case NSNumber(value: 102)?:
|
||||||
let object = userInfo?["object"] as? TestEntity1
|
XCTAssertEqual(indexPath?.index(atPosition: 0), 0)
|
||||||
|
XCTAssertEqual(indexPath?.index(atPosition: 1), 0)
|
||||||
|
|
||||||
switch object?.testEntityID {
|
XCTAssertEqual(object?.testBoolean, NSNumber(value: false))
|
||||||
|
XCTAssertEqual(object?.testNumber, NSNumber(value: 22))
|
||||||
case NSNumber(value: 101)?:
|
XCTAssertEqual(object?.testDecimal, NSDecimalNumber(string: "22"))
|
||||||
XCTAssertEqual(indexPath?.index(atPosition: 0), 1)
|
XCTAssertEqual(object?.testString, "nil:TestEntity1:22")
|
||||||
XCTAssertEqual(indexPath?.index(atPosition: 1), 0)
|
XCTAssertEqual(object?.testData, ("nil:TestEntity1:22" as NSString).data(using: String.Encoding.utf8.rawValue)!)
|
||||||
|
XCTAssertEqual(object?.testDate, self.dateFormatter.date(from: "2000-01-22T00:00:00Z")!)
|
||||||
XCTAssertEqual(object?.testBoolean, NSNumber(value: true))
|
|
||||||
XCTAssertEqual(object?.testNumber, NSNumber(value: 11))
|
default:
|
||||||
XCTAssertEqual(object?.testDecimal, NSDecimalNumber(string: "11"))
|
XCTFail()
|
||||||
XCTAssertEqual(object?.testString, "nil:TestEntity1:11")
|
|
||||||
XCTAssertEqual(object?.testData, ("nil:TestEntity1:11" as NSString).data(using: String.Encoding.utf8.rawValue)!)
|
|
||||||
XCTAssertEqual(object?.testDate, self.dateFormatter.date(from: "2000-01-11T00:00:00Z")!)
|
|
||||||
|
|
||||||
case NSNumber(value: 102)?:
|
|
||||||
XCTAssertEqual(indexPath?.index(atPosition: 0), 0)
|
|
||||||
XCTAssertEqual(indexPath?.index(atPosition: 1), 0)
|
|
||||||
|
|
||||||
XCTAssertEqual(object?.testBoolean, NSNumber(value: false))
|
|
||||||
XCTAssertEqual(object?.testNumber, NSNumber(value: 22))
|
|
||||||
XCTAssertEqual(object?.testDecimal, NSDecimalNumber(string: "22"))
|
|
||||||
XCTAssertEqual(object?.testString, "nil:TestEntity1:22")
|
|
||||||
XCTAssertEqual(object?.testData, ("nil:TestEntity1:22" as NSString).data(using: String.Encoding.utf8.rawValue)!)
|
|
||||||
XCTAssertEqual(object?.testDate, self.dateFormatter.date(from: "2000-01-22T00:00:00Z")!)
|
|
||||||
|
|
||||||
default:
|
|
||||||
XCTFail()
|
|
||||||
}
|
|
||||||
defer {
|
|
||||||
|
|
||||||
events += 1
|
|
||||||
}
|
|
||||||
return events == 1 || events == 2
|
|
||||||
}
|
}
|
||||||
)
|
defer {
|
||||||
}
|
|
||||||
|
events += 1
|
||||||
|
}
|
||||||
|
return events == 1 || events == 2
|
||||||
|
}
|
||||||
|
)
|
||||||
let didChangeExpectation = self.expectation(
|
let didChangeExpectation = self.expectation(
|
||||||
forNotification: "listMonitorDidChange:",
|
forNotification: NSNotification.Name(rawValue: "listMonitorDidChange:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -270,9 +268,9 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
stack.perform(
|
stack.perform(
|
||||||
asynchronous: { (transaction) -> Bool in
|
asynchronous: { (transaction) -> Bool in
|
||||||
|
|
||||||
if let object = transaction.fetchOne(
|
if let object = try transaction.fetchOne(
|
||||||
From<TestEntity1>(),
|
From<TestEntity1>(),
|
||||||
Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 101)) {
|
Where<TestEntity1>(#keyPath(TestEntity1.testEntityID), isEqualTo: 101)) {
|
||||||
|
|
||||||
object.testNumber = NSNumber(value: 11)
|
object.testNumber = NSNumber(value: 11)
|
||||||
object.testDecimal = NSDecimalNumber(string: "11")
|
object.testDecimal = NSDecimalNumber(string: "11")
|
||||||
@@ -284,9 +282,9 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
}
|
}
|
||||||
if let object = transaction.fetchOne(
|
if let object = try transaction.fetchOne(
|
||||||
From<TestEntity1>(),
|
From<TestEntity1>(),
|
||||||
Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 102)) {
|
Where<TestEntity1>(#keyPath(TestEntity1.testEntityID), isEqualTo: 102)) {
|
||||||
|
|
||||||
object.testNumber = NSNumber(value: 22)
|
object.testNumber = NSNumber(value: 22)
|
||||||
object.testDecimal = NSDecimalNumber(string: "22")
|
object.testDecimal = NSDecimalNumber(string: "22")
|
||||||
@@ -325,14 +323,14 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
let monitor = stack.monitorSectionedList(
|
let monitor = stack.monitorSectionedList(
|
||||||
From<TestEntity1>(),
|
From<TestEntity1>(),
|
||||||
SectionBy(#keyPath(TestEntity1.testBoolean)),
|
SectionBy(#keyPath(TestEntity1.testBoolean)),
|
||||||
OrderBy(.ascending(#keyPath(TestEntity1.testBoolean)), .ascending(#keyPath(TestEntity1.testEntityID)))
|
OrderBy<TestEntity1>(.ascending(#keyPath(TestEntity1.testBoolean)), .ascending(#keyPath(TestEntity1.testEntityID)))
|
||||||
)
|
)
|
||||||
monitor.addObserver(observer)
|
monitor.addObserver(observer)
|
||||||
|
|
||||||
var events = 0
|
var events = 0
|
||||||
|
|
||||||
let willChangeExpectation = self.expectation(
|
let willChangeExpectation = self.expectation(
|
||||||
forNotification: "listMonitorWillChange:",
|
forNotification: NSNotification.Name(rawValue: "listMonitorWillChange:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -346,7 +344,7 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
let didMoveObjectExpectation = self.expectation(
|
let didMoveObjectExpectation = self.expectation(
|
||||||
forNotification: "listMonitor:didMoveObject:fromIndexPath:toIndexPath:",
|
forNotification: NSNotification.Name(rawValue: "listMonitor:didMoveObject:fromIndexPath:toIndexPath:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -379,7 +377,7 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
let didChangeExpectation = self.expectation(
|
let didChangeExpectation = self.expectation(
|
||||||
forNotification: "listMonitorDidChange:",
|
forNotification: NSNotification.Name(rawValue: "listMonitorDidChange:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -396,9 +394,9 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
stack.perform(
|
stack.perform(
|
||||||
asynchronous: { (transaction) -> Bool in
|
asynchronous: { (transaction) -> Bool in
|
||||||
|
|
||||||
if let object = transaction.fetchOne(
|
if let object = try transaction.fetchOne(
|
||||||
From<TestEntity1>(),
|
From<TestEntity1>(),
|
||||||
Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 102)) {
|
Where<TestEntity1>(#keyPath(TestEntity1.testEntityID), isEqualTo: 102)) {
|
||||||
|
|
||||||
object.testBoolean = NSNumber(value: true)
|
object.testBoolean = NSNumber(value: true)
|
||||||
}
|
}
|
||||||
@@ -433,14 +431,14 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
let monitor = stack.monitorSectionedList(
|
let monitor = stack.monitorSectionedList(
|
||||||
From<TestEntity1>(),
|
From<TestEntity1>(),
|
||||||
SectionBy(#keyPath(TestEntity1.testBoolean)),
|
SectionBy(#keyPath(TestEntity1.testBoolean)),
|
||||||
OrderBy(.ascending(#keyPath(TestEntity1.testBoolean)), .ascending(#keyPath(TestEntity1.testEntityID)))
|
OrderBy<TestEntity1>(.ascending(#keyPath(TestEntity1.testBoolean)), .ascending(#keyPath(TestEntity1.testEntityID)))
|
||||||
)
|
)
|
||||||
monitor.addObserver(observer)
|
monitor.addObserver(observer)
|
||||||
|
|
||||||
var events = 0
|
var events = 0
|
||||||
|
|
||||||
let willChangeExpectation = self.expectation(
|
let willChangeExpectation = self.expectation(
|
||||||
forNotification: "listMonitorWillChange:",
|
forNotification: NSNotification.Name(rawValue: "listMonitorWillChange:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -453,40 +451,37 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
return events == 0
|
return events == 0
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
for _ in 1 ... 2 {
|
let didUpdateObjectExpectation = self.expectation(
|
||||||
|
forNotification: NSNotification.Name(rawValue: "listMonitor:didDeleteObject:fromIndexPath:"),
|
||||||
let didUpdateObjectExpectation = self.expectation(
|
object: observer,
|
||||||
forNotification: "listMonitor:didDeleteObject:fromIndexPath:",
|
handler: { (note) -> Bool in
|
||||||
object: observer,
|
|
||||||
handler: { (note) -> Bool in
|
XCTAssert(events == 1 || events == 2)
|
||||||
|
|
||||||
|
let userInfo = note.userInfo
|
||||||
|
XCTAssertNotNil(userInfo)
|
||||||
|
XCTAssertEqual(
|
||||||
|
Set(userInfo?.keys.map({ $0 as! String }) ?? []),
|
||||||
|
["indexPath", "object"]
|
||||||
|
)
|
||||||
|
|
||||||
|
let indexPath = userInfo?["indexPath"] as? NSIndexPath
|
||||||
|
|
||||||
|
XCTAssertEqual(indexPath?.section, 0)
|
||||||
|
XCTAssert(indexPath?.index(atPosition: 1) == 0 || indexPath?.index(atPosition: 1) == 1)
|
||||||
|
|
||||||
|
let object = userInfo?["object"] as? TestEntity1
|
||||||
|
XCTAssertEqual(object?.isDeleted, true)
|
||||||
|
|
||||||
|
defer {
|
||||||
|
|
||||||
XCTAssert(events == 1 || events == 2)
|
events += 1
|
||||||
|
|
||||||
let userInfo = note.userInfo
|
|
||||||
XCTAssertNotNil(userInfo)
|
|
||||||
XCTAssertEqual(
|
|
||||||
Set(userInfo?.keys.map({ $0 as! String }) ?? []),
|
|
||||||
["indexPath", "object"]
|
|
||||||
)
|
|
||||||
|
|
||||||
let indexPath = userInfo?["indexPath"] as? NSIndexPath
|
|
||||||
|
|
||||||
XCTAssertEqual(indexPath?.section, 0)
|
|
||||||
XCTAssert(indexPath?.index(atPosition: 1) == 0 || indexPath?.index(atPosition: 1) == 1)
|
|
||||||
|
|
||||||
let object = userInfo?["object"] as? TestEntity1
|
|
||||||
XCTAssertEqual(object?.isDeleted, true)
|
|
||||||
|
|
||||||
defer {
|
|
||||||
|
|
||||||
events += 1
|
|
||||||
}
|
|
||||||
return events == 1 || events == 2
|
|
||||||
}
|
}
|
||||||
)
|
return events == 1 || events == 2
|
||||||
}
|
}
|
||||||
|
)
|
||||||
let didDeleteSectionExpectation = self.expectation(
|
let didDeleteSectionExpectation = self.expectation(
|
||||||
forNotification: "listMonitor:didDeleteSection:fromSectionIndex:",
|
forNotification: NSNotification.Name(rawValue: "listMonitor:didDeleteSection:fromSectionIndex:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -514,7 +509,7 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
let didChangeExpectation = self.expectation(
|
let didChangeExpectation = self.expectation(
|
||||||
forNotification: "listMonitorDidChange:",
|
forNotification: NSNotification.Name(rawValue: "listMonitorDidChange:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -531,10 +526,11 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
stack.perform(
|
stack.perform(
|
||||||
asynchronous: { (transaction) -> Bool in
|
asynchronous: { (transaction) -> Bool in
|
||||||
|
|
||||||
transaction.deleteAll(
|
let count = try transaction.deleteAll(
|
||||||
From<TestEntity1>(),
|
From<TestEntity1>(),
|
||||||
Where(#keyPath(TestEntity1.testBoolean), isEqualTo: false)
|
Where<TestEntity1>(#keyPath(TestEntity1.testBoolean), isEqualTo: false)
|
||||||
)
|
)
|
||||||
|
XCTAssertEqual(count, 2)
|
||||||
return transaction.hasChanges
|
return transaction.hasChanges
|
||||||
},
|
},
|
||||||
success: { (hasChanges) in
|
success: { (hasChanges) in
|
||||||
@@ -555,7 +551,7 @@ class ListObserverTests: BaseTestDataTestCase {
|
|||||||
|
|
||||||
// MARK: TestListObserver
|
// MARK: TestListObserver
|
||||||
|
|
||||||
@available(OSX 10.12, *)
|
@available(macOS 10.12, *)
|
||||||
class TestListObserver: ListSectionObserver {
|
class TestListObserver: ListSectionObserver {
|
||||||
|
|
||||||
// MARK: ListObserver
|
// MARK: ListObserver
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// MigrationChainTests.swift
|
// MigrationChainTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// ObjectObserverTests.swift
|
// ObjectObserverTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -31,7 +31,7 @@ import CoreStore
|
|||||||
|
|
||||||
// MARK: - ObjectObserverTests
|
// MARK: - ObjectObserverTests
|
||||||
|
|
||||||
@available(OSX 10.12, *)
|
@available(macOS 10.12, *)
|
||||||
class ObjectObserverTests: BaseTestDataTestCase {
|
class ObjectObserverTests: BaseTestDataTestCase {
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
@@ -41,9 +41,9 @@ class ObjectObserverTests: BaseTestDataTestCase {
|
|||||||
|
|
||||||
self.prepareTestDataForStack(stack)
|
self.prepareTestDataForStack(stack)
|
||||||
|
|
||||||
guard let object = stack.fetchOne(
|
guard let object = try stack.fetchOne(
|
||||||
From<TestEntity1>(),
|
From<TestEntity1>(),
|
||||||
Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 101)) else {
|
Where<TestEntity1>(#keyPath(TestEntity1.testEntityID), isEqualTo: 101)) else {
|
||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
return
|
return
|
||||||
@@ -58,7 +58,7 @@ class ObjectObserverTests: BaseTestDataTestCase {
|
|||||||
var events = 0
|
var events = 0
|
||||||
|
|
||||||
let willUpdateExpectation = self.expectation(
|
let willUpdateExpectation = self.expectation(
|
||||||
forNotification: "objectMonitor:willUpdateObject:",
|
forNotification: NSNotification.Name(rawValue: "objectMonitor:willUpdateObject:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ class ObjectObserverTests: BaseTestDataTestCase {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
let didUpdateExpectation = self.expectation(
|
let didUpdateExpectation = self.expectation(
|
||||||
forNotification: "objectMonitor:didUpdateObject:changedPersistentKeys:",
|
forNotification: NSNotification.Name(rawValue: "objectMonitor:didUpdateObject:changedPersistentKeys:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -138,9 +138,9 @@ class ObjectObserverTests: BaseTestDataTestCase {
|
|||||||
|
|
||||||
self.prepareTestDataForStack(stack)
|
self.prepareTestDataForStack(stack)
|
||||||
|
|
||||||
guard let object = stack.fetchOne(
|
guard let object = try stack.fetchOne(
|
||||||
From<TestEntity1>(),
|
From<TestEntity1>(),
|
||||||
Where(#keyPath(TestEntity1.testEntityID), isEqualTo: 101)) else {
|
Where<TestEntity1>(#keyPath(TestEntity1.testEntityID), isEqualTo: 101)) else {
|
||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
return
|
return
|
||||||
@@ -155,7 +155,7 @@ class ObjectObserverTests: BaseTestDataTestCase {
|
|||||||
var events = 0
|
var events = 0
|
||||||
|
|
||||||
let didDeleteExpectation = self.expectation(
|
let didDeleteExpectation = self.expectation(
|
||||||
forNotification: "objectMonitor:didDeleteObject:",
|
forNotification: NSNotification.Name(rawValue: "objectMonitor:didDeleteObject:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -203,7 +203,7 @@ class ObjectObserverTests: BaseTestDataTestCase {
|
|||||||
|
|
||||||
// MARK: TestObjectObserver
|
// MARK: TestObjectObserver
|
||||||
|
|
||||||
@available(OSX 10.12, *)
|
@available(macOS 10.12, *)
|
||||||
class TestObjectObserver: ObjectObserver {
|
class TestObjectObserver: ObjectObserver {
|
||||||
|
|
||||||
typealias ObjectEntityType = TestEntity1
|
typealias ObjectEntityType = TestEntity1
|
||||||
@@ -219,7 +219,7 @@ class TestObjectObserver: ObjectObserver {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func objectMonitor(_ monitor: ObjectMonitor<TestEntity1>, didUpdateObject object: TestEntity1, changedPersistentKeys: Set<KeyPath>) {
|
func objectMonitor(_ monitor: ObjectMonitor<TestEntity1>, didUpdateObject object: TestEntity1, changedPersistentKeys: Set<String>) {
|
||||||
|
|
||||||
NotificationCenter.default.post(
|
NotificationCenter.default.post(
|
||||||
name: NSNotification.Name(rawValue: "objectMonitor:didUpdateObject:changedPersistentKeys:"),
|
name: NSNotification.Name(rawValue: "objectMonitor:didUpdateObject:changedPersistentKeys:"),
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// OrderByTests.swift
|
// OrderByTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -38,21 +38,21 @@ final class OrderByTests: XCTestCase {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let orderBy = OrderBy()
|
let orderBy = OrderBy<NSManagedObject>()
|
||||||
XCTAssertEqual(orderBy, OrderBy([NSSortDescriptor]()))
|
XCTAssertEqual(orderBy, OrderBy<NSManagedObject>([NSSortDescriptor]()))
|
||||||
XCTAssertNotEqual(orderBy, OrderBy(NSSortDescriptor(key: "key", ascending: false)))
|
XCTAssertNotEqual(orderBy, OrderBy<NSManagedObject>(NSSortDescriptor(key: "key", ascending: false)))
|
||||||
XCTAssertTrue(orderBy.sortDescriptors.isEmpty)
|
XCTAssertTrue(orderBy.sortDescriptors.isEmpty)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let sortDescriptor = NSSortDescriptor(key: "key1", ascending: true)
|
let sortDescriptor = NSSortDescriptor(key: "key1", ascending: true)
|
||||||
let orderBy = OrderBy(sortDescriptor)
|
let orderBy = OrderBy<NSManagedObject>(sortDescriptor)
|
||||||
XCTAssertEqual(orderBy, OrderBy(sortDescriptor))
|
XCTAssertEqual(orderBy, OrderBy(sortDescriptor))
|
||||||
XCTAssertEqual(orderBy, OrderBy(.ascending("key1")))
|
XCTAssertEqual(orderBy, OrderBy<NSManagedObject>(.ascending("key1")))
|
||||||
XCTAssertNotEqual(orderBy, OrderBy(.ascending("key2")))
|
XCTAssertNotEqual(orderBy, OrderBy<NSManagedObject>(.ascending("key2")))
|
||||||
XCTAssertNotEqual(orderBy, OrderBy(.descending("key1")))
|
XCTAssertNotEqual(orderBy, OrderBy<NSManagedObject>(.descending("key1")))
|
||||||
XCTAssertNotEqual(orderBy, OrderBy(NSSortDescriptor(key: "key1", ascending: false)))
|
XCTAssertNotEqual(orderBy, OrderBy<NSManagedObject>(NSSortDescriptor(key: "key1", ascending: false)))
|
||||||
XCTAssertEqual(orderBy, OrderBy([sortDescriptor]))
|
XCTAssertEqual(orderBy, OrderBy<NSManagedObject>([sortDescriptor]))
|
||||||
XCTAssertEqual(orderBy.sortDescriptors, [sortDescriptor])
|
XCTAssertEqual(orderBy.sortDescriptors, [sortDescriptor])
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
@@ -61,76 +61,76 @@ final class OrderByTests: XCTestCase {
|
|||||||
NSSortDescriptor(key: "key1", ascending: true),
|
NSSortDescriptor(key: "key1", ascending: true),
|
||||||
NSSortDescriptor(key: "key2", ascending: false)
|
NSSortDescriptor(key: "key2", ascending: false)
|
||||||
]
|
]
|
||||||
let orderBy = OrderBy(sortDescriptors)
|
let orderBy = OrderBy<NSManagedObject>(sortDescriptors)
|
||||||
XCTAssertEqual(orderBy, OrderBy(sortDescriptors))
|
XCTAssertEqual(orderBy, OrderBy<NSManagedObject>(sortDescriptors))
|
||||||
XCTAssertEqual(orderBy, OrderBy(.ascending("key1"), .descending("key2")))
|
XCTAssertEqual(orderBy, OrderBy<NSManagedObject>(.ascending("key1"), .descending("key2")))
|
||||||
XCTAssertNotEqual(
|
XCTAssertNotEqual(
|
||||||
orderBy,
|
orderBy,
|
||||||
OrderBy(
|
OrderBy<NSManagedObject>(
|
||||||
[
|
[
|
||||||
NSSortDescriptor(key: "key1", ascending: false),
|
NSSortDescriptor(key: "key1", ascending: false),
|
||||||
NSSortDescriptor(key: "key2", ascending: false)
|
NSSortDescriptor(key: "key2", ascending: false)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
XCTAssertNotEqual(orderBy, OrderBy(.ascending("key1"), .ascending("key2")))
|
XCTAssertNotEqual(orderBy, OrderBy<NSManagedObject>(.ascending("key1"), .ascending("key2")))
|
||||||
XCTAssertNotEqual(orderBy, OrderBy(.ascending("key1"), .descending("key3")))
|
XCTAssertNotEqual(orderBy, OrderBy<NSManagedObject>(.ascending("key1"), .descending("key3")))
|
||||||
XCTAssertEqual(orderBy.sortDescriptors, sortDescriptors)
|
XCTAssertEqual(orderBy.sortDescriptors, sortDescriptors)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let orderBy = OrderBy(.ascending("key1"))
|
let orderBy = OrderBy<NSManagedObject>(.ascending("key1"))
|
||||||
let sortDescriptor = NSSortDescriptor(key: "key1", ascending: true)
|
let sortDescriptor = NSSortDescriptor(key: "key1", ascending: true)
|
||||||
XCTAssertEqual(orderBy, OrderBy(sortDescriptor))
|
XCTAssertEqual(orderBy, OrderBy<NSManagedObject>(sortDescriptor))
|
||||||
XCTAssertEqual(orderBy, OrderBy(.ascending("key1")))
|
XCTAssertEqual(orderBy, OrderBy<NSManagedObject>(.ascending("key1")))
|
||||||
XCTAssertNotEqual(orderBy, OrderBy(.descending("key1")))
|
XCTAssertNotEqual(orderBy, OrderBy<NSManagedObject>(.descending("key1")))
|
||||||
XCTAssertNotEqual(orderBy, OrderBy(.ascending("key2")))
|
XCTAssertNotEqual(orderBy, OrderBy<NSManagedObject>(.ascending("key2")))
|
||||||
XCTAssertEqual(orderBy, OrderBy([sortDescriptor]))
|
XCTAssertEqual(orderBy, OrderBy<NSManagedObject>([sortDescriptor]))
|
||||||
XCTAssertEqual(orderBy.sortDescriptors, [sortDescriptor])
|
XCTAssertEqual(orderBy.sortDescriptors, [sortDescriptor])
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let orderBy = OrderBy(.ascending("key1"), .descending("key2"))
|
let orderBy = OrderBy<NSManagedObject>(.ascending("key1"), .descending("key2"))
|
||||||
let sortDescriptors = [
|
let sortDescriptors = [
|
||||||
NSSortDescriptor(key: "key1", ascending: true),
|
NSSortDescriptor(key: "key1", ascending: true),
|
||||||
NSSortDescriptor(key: "key2", ascending: false)
|
NSSortDescriptor(key: "key2", ascending: false)
|
||||||
]
|
]
|
||||||
XCTAssertEqual(orderBy, OrderBy(sortDescriptors))
|
XCTAssertEqual(orderBy, OrderBy<NSManagedObject>(sortDescriptors))
|
||||||
XCTAssertEqual(orderBy, OrderBy(.ascending("key1"), .descending("key2")))
|
XCTAssertEqual(orderBy, OrderBy<NSManagedObject>(.ascending("key1"), .descending("key2")))
|
||||||
XCTAssertNotEqual(
|
XCTAssertNotEqual(
|
||||||
orderBy,
|
orderBy,
|
||||||
OrderBy(
|
OrderBy<NSManagedObject>(
|
||||||
[
|
[
|
||||||
NSSortDescriptor(key: "key1", ascending: false),
|
NSSortDescriptor(key: "key1", ascending: false),
|
||||||
NSSortDescriptor(key: "key2", ascending: false)
|
NSSortDescriptor(key: "key2", ascending: false)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
XCTAssertNotEqual(orderBy, OrderBy(.ascending("key1"), .ascending("key2")))
|
XCTAssertNotEqual(orderBy, OrderBy<NSManagedObject>(.ascending("key1"), .ascending("key2")))
|
||||||
XCTAssertNotEqual(orderBy, OrderBy(.ascending("key1"), .descending("key3")))
|
XCTAssertNotEqual(orderBy, OrderBy<NSManagedObject>(.ascending("key1"), .descending("key3")))
|
||||||
XCTAssertEqual(orderBy.sortDescriptors, sortDescriptors)
|
XCTAssertEqual(orderBy.sortDescriptors, sortDescriptors)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let sortKeys: [SortKey] = [.ascending("key1"), .descending("key2")]
|
let sortKeys: [OrderBy<NSManagedObject>.SortKey] = [.ascending("key1"), .descending("key2")]
|
||||||
let orderBy = OrderBy(sortKeys)
|
let orderBy = OrderBy<NSManagedObject>(sortKeys)
|
||||||
let sortDescriptors = [
|
let sortDescriptors = [
|
||||||
NSSortDescriptor(key: "key1", ascending: true),
|
NSSortDescriptor(key: "key1", ascending: true),
|
||||||
NSSortDescriptor(key: "key2", ascending: false)
|
NSSortDescriptor(key: "key2", ascending: false)
|
||||||
]
|
]
|
||||||
XCTAssertEqual(orderBy, OrderBy(sortDescriptors))
|
XCTAssertEqual(orderBy, OrderBy<NSManagedObject>(sortDescriptors))
|
||||||
XCTAssertEqual(orderBy, OrderBy(.ascending("key1"), .descending("key2")))
|
XCTAssertEqual(orderBy, OrderBy<NSManagedObject>(.ascending("key1"), .descending("key2")))
|
||||||
XCTAssertNotEqual(
|
XCTAssertNotEqual(
|
||||||
orderBy,
|
orderBy,
|
||||||
OrderBy(
|
OrderBy<NSManagedObject>(
|
||||||
[
|
[
|
||||||
NSSortDescriptor(key: "key1", ascending: false),
|
NSSortDescriptor(key: "key1", ascending: false),
|
||||||
NSSortDescriptor(key: "key2", ascending: false)
|
NSSortDescriptor(key: "key2", ascending: false)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
XCTAssertNotEqual(orderBy, OrderBy(.ascending("key1"), .ascending("key2")))
|
XCTAssertNotEqual(orderBy, OrderBy<NSManagedObject>(.ascending("key1"), .ascending("key2")))
|
||||||
XCTAssertNotEqual(orderBy, OrderBy(.ascending("key1"), .descending("key3")))
|
XCTAssertNotEqual(orderBy, OrderBy<NSManagedObject>(.ascending("key1"), .descending("key3")))
|
||||||
XCTAssertEqual(orderBy.sortDescriptors, sortDescriptors)
|
XCTAssertEqual(orderBy.sortDescriptors, sortDescriptors)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -138,15 +138,15 @@ final class OrderByTests: XCTestCase {
|
|||||||
@objc
|
@objc
|
||||||
dynamic func test_ThatOrderByClauseOperations_ComputeCorrectly() {
|
dynamic func test_ThatOrderByClauseOperations_ComputeCorrectly() {
|
||||||
|
|
||||||
let orderBy1 = OrderBy(.ascending("key1"))
|
let orderBy1 = OrderBy<NSManagedObject>(.ascending("key1"))
|
||||||
let orderBy2 = OrderBy(.descending("key2"))
|
let orderBy2 = OrderBy<NSManagedObject>(.descending("key2"))
|
||||||
let orderBy3 = OrderBy(.ascending("key3"))
|
let orderBy3 = OrderBy<NSManagedObject>(.ascending("key3"))
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let plusOrderBy = orderBy1 + orderBy2 + orderBy3
|
let plusOrderBy = orderBy1 + orderBy2 + orderBy3
|
||||||
XCTAssertEqual(plusOrderBy, OrderBy(.ascending("key1"), .descending("key2"), .ascending("key3")))
|
XCTAssertEqual(plusOrderBy, OrderBy<NSManagedObject>(.ascending("key1"), .descending("key2"), .ascending("key3")))
|
||||||
XCTAssertEqual(plusOrderBy, OrderBy(.ascending("key1")) + OrderBy(.descending("key2"), .ascending("key3")))
|
XCTAssertEqual(plusOrderBy, OrderBy<NSManagedObject>(.ascending("key1")) + OrderBy<NSManagedObject>(.descending("key2"), .ascending("key3")))
|
||||||
XCTAssertNotEqual(plusOrderBy, orderBy1 + orderBy3 + orderBy2)
|
XCTAssertNotEqual(plusOrderBy, orderBy1 + orderBy3 + orderBy2)
|
||||||
XCTAssertNotEqual(plusOrderBy, orderBy2 + orderBy1 + orderBy3)
|
XCTAssertNotEqual(plusOrderBy, orderBy2 + orderBy1 + orderBy3)
|
||||||
XCTAssertNotEqual(plusOrderBy, orderBy2 + orderBy3 + orderBy1)
|
XCTAssertNotEqual(plusOrderBy, orderBy2 + orderBy3 + orderBy1)
|
||||||
@@ -158,14 +158,14 @@ final class OrderByTests: XCTestCase {
|
|||||||
|
|
||||||
var plusOrderBy = orderBy1
|
var plusOrderBy = orderBy1
|
||||||
plusOrderBy += orderBy2
|
plusOrderBy += orderBy2
|
||||||
XCTAssertEqual(plusOrderBy, OrderBy(.ascending("key1"), .descending("key2")))
|
XCTAssertEqual(plusOrderBy, OrderBy<NSManagedObject>(.ascending("key1"), .descending("key2")))
|
||||||
XCTAssertEqual(plusOrderBy, OrderBy(.ascending("key1")) + OrderBy(.descending("key2")))
|
XCTAssertEqual(plusOrderBy, OrderBy<NSManagedObject>(.ascending("key1")) + OrderBy<NSManagedObject>(.descending("key2")))
|
||||||
XCTAssertNotEqual(plusOrderBy, orderBy2 + orderBy1)
|
XCTAssertNotEqual(plusOrderBy, orderBy2 + orderBy1)
|
||||||
XCTAssertEqual(plusOrderBy.sortDescriptors, orderBy1.sortDescriptors + orderBy2.sortDescriptors)
|
XCTAssertEqual(plusOrderBy.sortDescriptors, orderBy1.sortDescriptors + orderBy2.sortDescriptors)
|
||||||
|
|
||||||
plusOrderBy += orderBy3
|
plusOrderBy += orderBy3
|
||||||
XCTAssertEqual(plusOrderBy, OrderBy(.ascending("key1"), .descending("key2"), .ascending("key3")))
|
XCTAssertEqual(plusOrderBy, OrderBy<NSManagedObject>(.ascending("key1"), .descending("key2"), .ascending("key3")))
|
||||||
XCTAssertEqual(plusOrderBy, OrderBy(.ascending("key1"), .descending("key2")) + OrderBy(.ascending("key3")))
|
XCTAssertEqual(plusOrderBy, OrderBy<NSManagedObject>(.ascending("key1"), .descending("key2")) + OrderBy<NSManagedObject>(.ascending("key3")))
|
||||||
XCTAssertNotEqual(plusOrderBy, orderBy1 + orderBy3 + orderBy2)
|
XCTAssertNotEqual(plusOrderBy, orderBy1 + orderBy3 + orderBy2)
|
||||||
XCTAssertNotEqual(plusOrderBy, orderBy2 + orderBy1 + orderBy3)
|
XCTAssertNotEqual(plusOrderBy, orderBy2 + orderBy1 + orderBy3)
|
||||||
XCTAssertNotEqual(plusOrderBy, orderBy2 + orderBy3 + orderBy1)
|
XCTAssertNotEqual(plusOrderBy, orderBy2 + orderBy3 + orderBy1)
|
||||||
@@ -178,7 +178,7 @@ final class OrderByTests: XCTestCase {
|
|||||||
@objc
|
@objc
|
||||||
dynamic func test_ThatOrderByClauses_ApplyToFetchRequestsCorrectly() {
|
dynamic func test_ThatOrderByClauses_ApplyToFetchRequestsCorrectly() {
|
||||||
|
|
||||||
let orderBy = OrderBy(.ascending("key"))
|
let orderBy = OrderBy<NSManagedObject>(.ascending("key"))
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
orderBy.applyToFetchRequest(request)
|
orderBy.applyToFetchRequest(request)
|
||||||
XCTAssertNotNil(request.sortDescriptors)
|
XCTAssertNotNil(request.sortDescriptors)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@
|
|||||||
// SectionByTests.swift
|
// SectionByTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -31,7 +31,7 @@ import CoreStore
|
|||||||
|
|
||||||
//MARK: - SectionByTests
|
//MARK: - SectionByTests
|
||||||
|
|
||||||
@available(OSX 10.12, *)
|
@available(macOS 10.12, *)
|
||||||
final class SectionByTests: XCTestCase {
|
final class SectionByTests: XCTestCase {
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
@@ -39,13 +39,13 @@ final class SectionByTests: XCTestCase {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let sectionBy = SectionBy("key")
|
let sectionBy = SectionBy<NSManagedObject>("key")
|
||||||
XCTAssertEqual(sectionBy.sectionKeyPath, "key")
|
XCTAssertEqual(sectionBy.sectionKeyPath, "key")
|
||||||
XCTAssertEqual(sectionBy.sectionIndexTransformer("key"), "key")
|
XCTAssertEqual(sectionBy.sectionIndexTransformer("key"), "key")
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let sectionBy = SectionBy("key") { $0.flatMap { "\($0):suffix" } }
|
let sectionBy = SectionBy<NSManagedObject>("key") { $0.flatMap { "\($0):suffix" } }
|
||||||
XCTAssertEqual(sectionBy.sectionKeyPath, "key")
|
XCTAssertEqual(sectionBy.sectionKeyPath, "key")
|
||||||
XCTAssertEqual(sectionBy.sectionIndexTransformer("key"), "key:suffix")
|
XCTAssertEqual(sectionBy.sectionIndexTransformer("key"), "key:suffix")
|
||||||
XCTAssertNil(sectionBy.sectionIndexTransformer(nil))
|
XCTAssertNil(sectionBy.sectionIndexTransformer(nil))
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// SelectTests.swift
|
// SelectTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -38,7 +38,7 @@ final class SelectTests: XCTestCase {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let term: SelectTerm = "attribute"
|
let term: SelectTerm<NSManagedObject> = "attribute"
|
||||||
XCTAssertEqual(term, SelectTerm.attribute("attribute"))
|
XCTAssertEqual(term, SelectTerm.attribute("attribute"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.attribute("attribute2"))
|
XCTAssertNotEqual(term, SelectTerm.attribute("attribute2"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.average("attribute"))
|
XCTAssertNotEqual(term, SelectTerm.average("attribute"))
|
||||||
@@ -58,7 +58,7 @@ final class SelectTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let term = SelectTerm.attribute("attribute")
|
let term = SelectTerm<NSManagedObject>.attribute("attribute")
|
||||||
XCTAssertNotEqual(term, SelectTerm.attribute("attribute2"))
|
XCTAssertNotEqual(term, SelectTerm.attribute("attribute2"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.average("attribute"))
|
XCTAssertNotEqual(term, SelectTerm.average("attribute"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.count("attribute"))
|
XCTAssertNotEqual(term, SelectTerm.count("attribute"))
|
||||||
@@ -82,7 +82,7 @@ final class SelectTests: XCTestCase {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let term = SelectTerm.average("attribute")
|
let term = SelectTerm<NSManagedObject>.average("attribute")
|
||||||
XCTAssertEqual(term, SelectTerm.average("attribute"))
|
XCTAssertEqual(term, SelectTerm.average("attribute"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.average("attribute", as: "alias"))
|
XCTAssertNotEqual(term, SelectTerm.average("attribute", as: "alias"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.average("attribute2"))
|
XCTAssertNotEqual(term, SelectTerm.average("attribute2"))
|
||||||
@@ -106,7 +106,7 @@ final class SelectTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let term = SelectTerm.average("attribute", as: "alias")
|
let term = SelectTerm<NSManagedObject>.average("attribute", as: "alias")
|
||||||
XCTAssertEqual(term, SelectTerm.average("attribute", as: "alias"))
|
XCTAssertEqual(term, SelectTerm.average("attribute", as: "alias"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.average("attribute", as: "alias2"))
|
XCTAssertNotEqual(term, SelectTerm.average("attribute", as: "alias2"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.average("attribute2"))
|
XCTAssertNotEqual(term, SelectTerm.average("attribute2"))
|
||||||
@@ -135,7 +135,7 @@ final class SelectTests: XCTestCase {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let term = SelectTerm.count("attribute")
|
let term = SelectTerm<NSManagedObject>.count("attribute")
|
||||||
XCTAssertEqual(term, SelectTerm.count("attribute"))
|
XCTAssertEqual(term, SelectTerm.count("attribute"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.count("attribute", as: "alias"))
|
XCTAssertNotEqual(term, SelectTerm.count("attribute", as: "alias"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.count("attribute2"))
|
XCTAssertNotEqual(term, SelectTerm.count("attribute2"))
|
||||||
@@ -159,7 +159,7 @@ final class SelectTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let term = SelectTerm.count("attribute", as: "alias")
|
let term = SelectTerm<NSManagedObject>.count("attribute", as: "alias")
|
||||||
XCTAssertEqual(term, SelectTerm.count("attribute", as: "alias"))
|
XCTAssertEqual(term, SelectTerm.count("attribute", as: "alias"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.count("attribute", as: "alias2"))
|
XCTAssertNotEqual(term, SelectTerm.count("attribute", as: "alias2"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.count("attribute2"))
|
XCTAssertNotEqual(term, SelectTerm.count("attribute2"))
|
||||||
@@ -188,7 +188,7 @@ final class SelectTests: XCTestCase {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let term = SelectTerm.maximum("attribute")
|
let term = SelectTerm<NSManagedObject>.maximum("attribute")
|
||||||
XCTAssertEqual(term, SelectTerm.maximum("attribute"))
|
XCTAssertEqual(term, SelectTerm.maximum("attribute"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.maximum("attribute", as: "alias"))
|
XCTAssertNotEqual(term, SelectTerm.maximum("attribute", as: "alias"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.maximum("attribute2"))
|
XCTAssertNotEqual(term, SelectTerm.maximum("attribute2"))
|
||||||
@@ -212,7 +212,7 @@ final class SelectTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let term = SelectTerm.maximum("attribute", as: "alias")
|
let term = SelectTerm<NSManagedObject>.maximum("attribute", as: "alias")
|
||||||
XCTAssertEqual(term, SelectTerm.maximum("attribute", as: "alias"))
|
XCTAssertEqual(term, SelectTerm.maximum("attribute", as: "alias"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.maximum("attribute", as: "alias2"))
|
XCTAssertNotEqual(term, SelectTerm.maximum("attribute", as: "alias2"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.maximum("attribute2"))
|
XCTAssertNotEqual(term, SelectTerm.maximum("attribute2"))
|
||||||
@@ -241,7 +241,7 @@ final class SelectTests: XCTestCase {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let term = SelectTerm.minimum("attribute")
|
let term = SelectTerm<NSManagedObject>.minimum("attribute")
|
||||||
XCTAssertEqual(term, SelectTerm.minimum("attribute"))
|
XCTAssertEqual(term, SelectTerm.minimum("attribute"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.minimum("attribute", as: "alias"))
|
XCTAssertNotEqual(term, SelectTerm.minimum("attribute", as: "alias"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.minimum("attribute2"))
|
XCTAssertNotEqual(term, SelectTerm.minimum("attribute2"))
|
||||||
@@ -265,7 +265,7 @@ final class SelectTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let term = SelectTerm.minimum("attribute", as: "alias")
|
let term = SelectTerm<NSManagedObject>.minimum("attribute", as: "alias")
|
||||||
XCTAssertEqual(term, SelectTerm.minimum("attribute", as: "alias"))
|
XCTAssertEqual(term, SelectTerm.minimum("attribute", as: "alias"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.minimum("attribute", as: "alias2"))
|
XCTAssertNotEqual(term, SelectTerm.minimum("attribute", as: "alias2"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.minimum("attribute2"))
|
XCTAssertNotEqual(term, SelectTerm.minimum("attribute2"))
|
||||||
@@ -294,7 +294,7 @@ final class SelectTests: XCTestCase {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let term = SelectTerm.sum("attribute")
|
let term = SelectTerm<NSManagedObject>.sum("attribute")
|
||||||
XCTAssertEqual(term, SelectTerm.sum("attribute"))
|
XCTAssertEqual(term, SelectTerm.sum("attribute"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.sum("attribute", as: "alias"))
|
XCTAssertNotEqual(term, SelectTerm.sum("attribute", as: "alias"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.sum("attribute2"))
|
XCTAssertNotEqual(term, SelectTerm.sum("attribute2"))
|
||||||
@@ -318,7 +318,7 @@ final class SelectTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let term = SelectTerm.sum("attribute", as: "alias")
|
let term = SelectTerm<NSManagedObject>.sum("attribute", as: "alias")
|
||||||
XCTAssertEqual(term, SelectTerm.sum("attribute", as: "alias"))
|
XCTAssertEqual(term, SelectTerm.sum("attribute", as: "alias"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.sum("attribute", as: "alias2"))
|
XCTAssertNotEqual(term, SelectTerm.sum("attribute", as: "alias2"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.sum("attribute2"))
|
XCTAssertNotEqual(term, SelectTerm.sum("attribute2"))
|
||||||
@@ -347,7 +347,7 @@ final class SelectTests: XCTestCase {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let term = SelectTerm.objectID()
|
let term = SelectTerm<NSManagedObject>.objectID()
|
||||||
XCTAssertEqual(term, SelectTerm.objectID())
|
XCTAssertEqual(term, SelectTerm.objectID())
|
||||||
XCTAssertNotEqual(term, SelectTerm.objectID(as: "alias"))
|
XCTAssertNotEqual(term, SelectTerm.objectID(as: "alias"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.attribute("attribute"))
|
XCTAssertNotEqual(term, SelectTerm.attribute("attribute"))
|
||||||
@@ -368,7 +368,7 @@ final class SelectTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let term = SelectTerm.objectID(as: "alias")
|
let term = SelectTerm<NSManagedObject>.objectID(as: "alias")
|
||||||
XCTAssertEqual(term, SelectTerm.objectID(as: "alias"))
|
XCTAssertEqual(term, SelectTerm.objectID(as: "alias"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.objectID(as: "alias2"))
|
XCTAssertNotEqual(term, SelectTerm.objectID(as: "alias2"))
|
||||||
XCTAssertNotEqual(term, SelectTerm.objectID())
|
XCTAssertNotEqual(term, SelectTerm.objectID())
|
||||||
@@ -393,12 +393,12 @@ final class SelectTests: XCTestCase {
|
|||||||
@objc
|
@objc
|
||||||
dynamic func test_ThatSelectClauses_ConfigureCorrectly() {
|
dynamic func test_ThatSelectClauses_ConfigureCorrectly() {
|
||||||
|
|
||||||
let term1 = SelectTerm.attribute("attribute1")
|
let term1 = SelectTerm<NSManagedObject>.attribute("attribute1")
|
||||||
let term2 = SelectTerm.attribute("attribute2")
|
let term2 = SelectTerm<NSManagedObject>.attribute("attribute2")
|
||||||
let term3 = SelectTerm.attribute("attribute3")
|
let term3 = SelectTerm<NSManagedObject>.attribute("attribute3")
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let select = Select<Int>(term1, term2, term3)
|
let select = Select<NSManagedObject, Int>(term1, term2, term3)
|
||||||
XCTAssertEqual(select.selectTerms, [term1, term2, term3])
|
XCTAssertEqual(select.selectTerms, [term1, term2, term3])
|
||||||
XCTAssertNotEqual(select.selectTerms, [term1, term3, term2])
|
XCTAssertNotEqual(select.selectTerms, [term1, term3, term2])
|
||||||
XCTAssertNotEqual(select.selectTerms, [term2, term1, term3])
|
XCTAssertNotEqual(select.selectTerms, [term2, term1, term3])
|
||||||
@@ -408,7 +408,7 @@ final class SelectTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let select = Select<Int>([term1, term2, term3])
|
let select = Select<NSManagedObject, Int>([term1, term2, term3])
|
||||||
XCTAssertEqual(select.selectTerms, [term1, term2, term3])
|
XCTAssertEqual(select.selectTerms, [term1, term2, term3])
|
||||||
XCTAssertNotEqual(select.selectTerms, [term1, term3, term2])
|
XCTAssertNotEqual(select.selectTerms, [term1, term3, term2])
|
||||||
XCTAssertNotEqual(select.selectTerms, [term2, term1, term3])
|
XCTAssertNotEqual(select.selectTerms, [term2, term1, term3])
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// SetupTests.swift
|
// SetupTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -37,9 +37,10 @@ class SetupTests: BaseTestDataTestCase {
|
|||||||
do {
|
do {
|
||||||
|
|
||||||
let schemaHistory = SchemaHistory(
|
let schemaHistory = SchemaHistory(
|
||||||
modelName: "Model",
|
XcodeDataModelSchema.from(
|
||||||
bundle: Bundle(for: type(of: self)),
|
modelName: "Model",
|
||||||
migrationChain: nil
|
bundle: Bundle(for: type(of: self))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
let stack = DataStack(schemaHistory: schemaHistory)
|
let stack = DataStack(schemaHistory: schemaHistory)
|
||||||
XCTAssertEqual(stack.coordinator.managedObjectModel, schemaHistory.rawModel)
|
XCTAssertEqual(stack.coordinator.managedObjectModel, schemaHistory.rawModel)
|
||||||
@@ -66,7 +67,7 @@ class SetupTests: BaseTestDataTestCase {
|
|||||||
let stack = self.expectLogger([.logWarning]) {
|
let stack = self.expectLogger([.logWarning]) {
|
||||||
|
|
||||||
DataStack(
|
DataStack(
|
||||||
modelName: "Model",
|
xcodeModelName: "Model",
|
||||||
bundle: Bundle(for: type(of: self)),
|
bundle: Bundle(for: type(of: self)),
|
||||||
migrationChain: migrationChain
|
migrationChain: migrationChain
|
||||||
)
|
)
|
||||||
@@ -83,7 +84,7 @@ class SetupTests: BaseTestDataTestCase {
|
|||||||
dynamic func test_ThatInMemoryStores_SetupCorrectly() {
|
dynamic func test_ThatInMemoryStores_SetupCorrectly() {
|
||||||
|
|
||||||
let stack = DataStack(
|
let stack = DataStack(
|
||||||
modelName: "Model",
|
xcodeModelName: "Model",
|
||||||
bundle: Bundle(for: type(of: self))
|
bundle: Bundle(for: type(of: self))
|
||||||
)
|
)
|
||||||
do {
|
do {
|
||||||
@@ -138,7 +139,7 @@ class SetupTests: BaseTestDataTestCase {
|
|||||||
dynamic func test_ThatSQLiteStores_SetupCorrectly() {
|
dynamic func test_ThatSQLiteStores_SetupCorrectly() {
|
||||||
|
|
||||||
let stack = DataStack(
|
let stack = DataStack(
|
||||||
modelName: "Model",
|
xcodeModelName: "Model",
|
||||||
bundle: Bundle(for: type(of: self))
|
bundle: Bundle(for: type(of: self))
|
||||||
)
|
)
|
||||||
do {
|
do {
|
||||||
@@ -206,7 +207,7 @@ class SetupTests: BaseTestDataTestCase {
|
|||||||
do {
|
do {
|
||||||
|
|
||||||
let stack = DataStack(
|
let stack = DataStack(
|
||||||
modelName: "Model",
|
xcodeModelName: "Model",
|
||||||
bundle: Bundle(for: type(of: self))
|
bundle: Bundle(for: type(of: self))
|
||||||
)
|
)
|
||||||
try! stack.addStorageAndWait(sqliteStore)
|
try! stack.addStorageAndWait(sqliteStore)
|
||||||
@@ -225,10 +226,10 @@ class SetupTests: BaseTestDataTestCase {
|
|||||||
|
|
||||||
let metadata = try createStore()
|
let metadata = try createStore()
|
||||||
let stack = DataStack(
|
let stack = DataStack(
|
||||||
modelName: "Model",
|
xcodeModelName: "Model",
|
||||||
bundle: Bundle(for: type(of: self))
|
bundle: Bundle(for: type(of: self))
|
||||||
)
|
)
|
||||||
try sqliteStore.eraseStorageAndWait(
|
try sqliteStore.cs_eraseStorageAndWait(
|
||||||
metadata: metadata,
|
metadata: metadata,
|
||||||
soureModelHint: stack.schemaHistory.schema(for: metadata)?.rawModel()
|
soureModelHint: stack.schemaHistory.schema(for: metadata)?.rawModel()
|
||||||
)
|
)
|
||||||
@@ -243,7 +244,7 @@ class SetupTests: BaseTestDataTestCase {
|
|||||||
do {
|
do {
|
||||||
|
|
||||||
let metadata = try createStore()
|
let metadata = try createStore()
|
||||||
try sqliteStore.eraseStorageAndWait(metadata: metadata, soureModelHint: nil)
|
try sqliteStore.cs_eraseStorageAndWait(metadata: metadata, soureModelHint: nil)
|
||||||
XCTAssertFalse(fileManager.fileExists(atPath: sqliteStore.fileURL.path))
|
XCTAssertFalse(fileManager.fileExists(atPath: sqliteStore.fileURL.path))
|
||||||
XCTAssertFalse(fileManager.fileExists(atPath: sqliteStore.fileURL.path.appending("-wal")))
|
XCTAssertFalse(fileManager.fileExists(atPath: sqliteStore.fileURL.path.appending("-wal")))
|
||||||
XCTAssertFalse(fileManager.fileExists(atPath: sqliteStore.fileURL.path.appending("-shm")))
|
XCTAssertFalse(fileManager.fileExists(atPath: sqliteStore.fileURL.path.appending("-shm")))
|
||||||
@@ -258,7 +259,7 @@ class SetupTests: BaseTestDataTestCase {
|
|||||||
dynamic func test_ThatLegacySQLiteStores_SetupCorrectly() {
|
dynamic func test_ThatLegacySQLiteStores_SetupCorrectly() {
|
||||||
|
|
||||||
let stack = DataStack(
|
let stack = DataStack(
|
||||||
modelName: "Model",
|
xcodeModelName: "Model",
|
||||||
bundle: Bundle(for: type(of: self))
|
bundle: Bundle(for: type(of: self))
|
||||||
)
|
)
|
||||||
do {
|
do {
|
||||||
@@ -326,7 +327,7 @@ class SetupTests: BaseTestDataTestCase {
|
|||||||
do {
|
do {
|
||||||
|
|
||||||
let stack = DataStack(
|
let stack = DataStack(
|
||||||
modelName: "Model",
|
xcodeModelName: "Model",
|
||||||
bundle: Bundle(for: type(of: self))
|
bundle: Bundle(for: type(of: self))
|
||||||
)
|
)
|
||||||
try! stack.addStorageAndWait(sqliteStore)
|
try! stack.addStorageAndWait(sqliteStore)
|
||||||
@@ -345,10 +346,10 @@ class SetupTests: BaseTestDataTestCase {
|
|||||||
|
|
||||||
let metadata = try createStore()
|
let metadata = try createStore()
|
||||||
let stack = DataStack(
|
let stack = DataStack(
|
||||||
modelName: "Model",
|
xcodeModelName: "Model",
|
||||||
bundle: Bundle(for: type(of: self))
|
bundle: Bundle(for: type(of: self))
|
||||||
)
|
)
|
||||||
try sqliteStore.eraseStorageAndWait(
|
try sqliteStore.cs_eraseStorageAndWait(
|
||||||
metadata: metadata,
|
metadata: metadata,
|
||||||
soureModelHint: stack.schemaHistory.schema(for: metadata)?.rawModel()
|
soureModelHint: stack.schemaHistory.schema(for: metadata)?.rawModel()
|
||||||
)
|
)
|
||||||
@@ -363,7 +364,7 @@ class SetupTests: BaseTestDataTestCase {
|
|||||||
do {
|
do {
|
||||||
|
|
||||||
let metadata = try createStore()
|
let metadata = try createStore()
|
||||||
try sqliteStore.eraseStorageAndWait(metadata: metadata, soureModelHint: nil)
|
try sqliteStore.cs_eraseStorageAndWait(metadata: metadata, soureModelHint: nil)
|
||||||
XCTAssertFalse(fileManager.fileExists(atPath: sqliteStore.fileURL.path))
|
XCTAssertFalse(fileManager.fileExists(atPath: sqliteStore.fileURL.path))
|
||||||
XCTAssertFalse(fileManager.fileExists(atPath: sqliteStore.fileURL.path.appending("-wal")))
|
XCTAssertFalse(fileManager.fileExists(atPath: sqliteStore.fileURL.path.appending("-wal")))
|
||||||
XCTAssertFalse(fileManager.fileExists(atPath: sqliteStore.fileURL.path.appending("-shm")))
|
XCTAssertFalse(fileManager.fileExists(atPath: sqliteStore.fileURL.path.appending("-shm")))
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// StorageInterfaceTests.swift
|
// StorageInterfaceTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -83,7 +83,21 @@ final class StorageInterfaceTests: XCTestCase {
|
|||||||
let store = SQLiteStore()
|
let store = SQLiteStore()
|
||||||
XCTAssertEqual(type(of: store).storeType, NSSQLiteStoreType)
|
XCTAssertEqual(type(of: store).storeType, NSSQLiteStoreType)
|
||||||
XCTAssertNil(store.configuration)
|
XCTAssertNil(store.configuration)
|
||||||
XCTAssertEqual(store.storeOptions as NSDictionary?, [NSSQLitePragmasOption: ["journal_mode": "WAL"]] as NSDictionary)
|
if #available(iOS 11.0, macOS 10.13, tvOS 11.0, *) {
|
||||||
|
|
||||||
|
XCTAssertEqual(
|
||||||
|
store.storeOptions as NSDictionary?,
|
||||||
|
[NSSQLitePragmasOption: ["journal_mode": "WAL"],
|
||||||
|
NSBinaryStoreInsecureDecodingCompatibilityOption: true] as NSDictionary
|
||||||
|
)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
XCTAssertEqual(
|
||||||
|
store.storeOptions as NSDictionary?,
|
||||||
|
[NSSQLitePragmasOption: ["journal_mode": "WAL"]] as NSDictionary
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
XCTAssertEqual(store.fileURL, SQLiteStore.defaultFileURL)
|
XCTAssertEqual(store.fileURL, SQLiteStore.defaultFileURL)
|
||||||
XCTAssertTrue(store.migrationMappingProviders.isEmpty)
|
XCTAssertTrue(store.migrationMappingProviders.isEmpty)
|
||||||
@@ -93,8 +107,8 @@ final class StorageInterfaceTests: XCTestCase {
|
|||||||
@objc
|
@objc
|
||||||
dynamic func test_ThatFileURLSQLiteStores_ConfigureCorrectly() {
|
dynamic func test_ThatFileURLSQLiteStores_ConfigureCorrectly() {
|
||||||
|
|
||||||
let fileURL = NSURL(fileURLWithPath: NSTemporaryDirectory())
|
let fileURL = FileManager.default.temporaryDirectory
|
||||||
.appendingPathComponent(NSUUID().uuidString, isDirectory: false)!
|
.appendingPathComponent(UUID().uuidString, isDirectory: false)
|
||||||
.appendingPathExtension("db")
|
.appendingPathExtension("db")
|
||||||
let mappingProvider = XcodeSchemaMappingProvider(
|
let mappingProvider = XcodeSchemaMappingProvider(
|
||||||
from: "V1", to: "V2",
|
from: "V1", to: "V2",
|
||||||
@@ -109,7 +123,21 @@ final class StorageInterfaceTests: XCTestCase {
|
|||||||
)
|
)
|
||||||
XCTAssertEqual(type(of: store).storeType, NSSQLiteStoreType)
|
XCTAssertEqual(type(of: store).storeType, NSSQLiteStoreType)
|
||||||
XCTAssertEqual(store.configuration, "config1")
|
XCTAssertEqual(store.configuration, "config1")
|
||||||
XCTAssertEqual(store.storeOptions as NSDictionary?, [NSSQLitePragmasOption: ["journal_mode": "WAL"]] as NSDictionary)
|
if #available(iOS 11.0, macOS 10.13, tvOS 11.0, *) {
|
||||||
|
|
||||||
|
XCTAssertEqual(
|
||||||
|
store.storeOptions as NSDictionary?,
|
||||||
|
[NSSQLitePragmasOption: ["journal_mode": "WAL"],
|
||||||
|
NSBinaryStoreInsecureDecodingCompatibilityOption: true] as NSDictionary
|
||||||
|
)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
XCTAssertEqual(
|
||||||
|
store.storeOptions as NSDictionary?,
|
||||||
|
[NSSQLitePragmasOption: ["journal_mode": "WAL"]] as NSDictionary
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
XCTAssertEqual(store.fileURL, fileURL)
|
XCTAssertEqual(store.fileURL, fileURL)
|
||||||
XCTAssertEqual(store.migrationMappingProviders as! [XcodeSchemaMappingProvider], [mappingProvider])
|
XCTAssertEqual(store.migrationMappingProviders as! [XcodeSchemaMappingProvider], [mappingProvider])
|
||||||
@@ -132,7 +160,21 @@ final class StorageInterfaceTests: XCTestCase {
|
|||||||
)
|
)
|
||||||
XCTAssertEqual(type(of: store).storeType, NSSQLiteStoreType)
|
XCTAssertEqual(type(of: store).storeType, NSSQLiteStoreType)
|
||||||
XCTAssertEqual(store.configuration, "config1")
|
XCTAssertEqual(store.configuration, "config1")
|
||||||
XCTAssertEqual(store.storeOptions as NSDictionary?, [NSSQLitePragmasOption: ["journal_mode": "WAL"]] as NSDictionary)
|
if #available(iOS 11.0, macOS 10.13, tvOS 11.0, *) {
|
||||||
|
|
||||||
|
XCTAssertEqual(
|
||||||
|
store.storeOptions as NSDictionary?,
|
||||||
|
[NSSQLitePragmasOption: ["journal_mode": "WAL"],
|
||||||
|
NSBinaryStoreInsecureDecodingCompatibilityOption: true] as NSDictionary
|
||||||
|
)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
XCTAssertEqual(
|
||||||
|
store.storeOptions as NSDictionary?,
|
||||||
|
[NSSQLitePragmasOption: ["journal_mode": "WAL"]] as NSDictionary
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
XCTAssertEqual(store.fileURL.deletingLastPathComponent(), SQLiteStore.defaultRootDirectory)
|
XCTAssertEqual(store.fileURL.deletingLastPathComponent(), SQLiteStore.defaultRootDirectory)
|
||||||
XCTAssertEqual(store.fileURL.lastPathComponent, fileName)
|
XCTAssertEqual(store.fileURL.lastPathComponent, fileName)
|
||||||
@@ -167,7 +209,21 @@ final class StorageInterfaceTests: XCTestCase {
|
|||||||
let store = SQLiteStore.legacy()
|
let store = SQLiteStore.legacy()
|
||||||
XCTAssertEqual(type(of: store).storeType, NSSQLiteStoreType)
|
XCTAssertEqual(type(of: store).storeType, NSSQLiteStoreType)
|
||||||
XCTAssertNil(store.configuration)
|
XCTAssertNil(store.configuration)
|
||||||
XCTAssertEqual(store.storeOptions as NSDictionary?, [NSSQLitePragmasOption: ["journal_mode": "WAL"]] as NSDictionary)
|
if #available(iOS 11.0, macOS 10.13, tvOS 11.0, *) {
|
||||||
|
|
||||||
|
XCTAssertEqual(
|
||||||
|
store.storeOptions as NSDictionary?,
|
||||||
|
[NSSQLitePragmasOption: ["journal_mode": "WAL"],
|
||||||
|
NSBinaryStoreInsecureDecodingCompatibilityOption: true] as NSDictionary
|
||||||
|
)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
XCTAssertEqual(
|
||||||
|
store.storeOptions as NSDictionary?,
|
||||||
|
[NSSQLitePragmasOption: ["journal_mode": "WAL"]] as NSDictionary
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
XCTAssertEqual(store.fileURL, SQLiteStore.legacyDefaultFileURL)
|
XCTAssertEqual(store.fileURL, SQLiteStore.legacyDefaultFileURL)
|
||||||
XCTAssertTrue(store.migrationMappingProviders.isEmpty)
|
XCTAssertTrue(store.migrationMappingProviders.isEmpty)
|
||||||
@@ -190,7 +246,21 @@ final class StorageInterfaceTests: XCTestCase {
|
|||||||
)
|
)
|
||||||
XCTAssertEqual(type(of: store).storeType, NSSQLiteStoreType)
|
XCTAssertEqual(type(of: store).storeType, NSSQLiteStoreType)
|
||||||
XCTAssertEqual(store.configuration, "config1")
|
XCTAssertEqual(store.configuration, "config1")
|
||||||
XCTAssertEqual(store.storeOptions as NSDictionary?, [NSSQLitePragmasOption: ["journal_mode": "WAL"]] as NSDictionary)
|
if #available(iOS 11.0, macOS 10.13, tvOS 11.0, *) {
|
||||||
|
|
||||||
|
XCTAssertEqual(
|
||||||
|
store.storeOptions as NSDictionary?,
|
||||||
|
[NSSQLitePragmasOption: ["journal_mode": "WAL"],
|
||||||
|
NSBinaryStoreInsecureDecodingCompatibilityOption: true] as NSDictionary
|
||||||
|
)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
XCTAssertEqual(
|
||||||
|
store.storeOptions as NSDictionary?,
|
||||||
|
[NSSQLitePragmasOption: ["journal_mode": "WAL"]] as NSDictionary
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
XCTAssertEqual(store.fileURL.deletingLastPathComponent(), SQLiteStore.legacyDefaultRootDirectory)
|
XCTAssertEqual(store.fileURL.deletingLastPathComponent(), SQLiteStore.legacyDefaultRootDirectory)
|
||||||
XCTAssertEqual(store.fileURL.lastPathComponent, fileName)
|
XCTAssertEqual(store.fileURL.lastPathComponent, fileName)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// TestEntity1.swift
|
// TestEntity1.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2014 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// TestEntity1.swift
|
// TestEntity1.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2014 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// TransactionTests.swift
|
// TransactionTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -69,9 +69,9 @@ final class TransactionTests: BaseTestCase {
|
|||||||
self.checkExpectationsImmediately()
|
self.checkExpectationsImmediately()
|
||||||
XCTAssertTrue(hasChanges)
|
XCTAssertTrue(hasChanges)
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>()), 1)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>()), 1)
|
||||||
|
|
||||||
let object = stack.fetchOne(From<TestEntity1>())
|
let object = try stack.fetchOne(From<TestEntity1>())
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(object?.fetchSource()?.unsafeContext(), stack.mainContext)
|
XCTAssertEqual(object?.fetchSource()?.unsafeContext(), stack.mainContext)
|
||||||
XCTAssertEqual(object?.querySource()?.unsafeContext(), stack.mainContext)
|
XCTAssertEqual(object?.querySource()?.unsafeContext(), stack.mainContext)
|
||||||
@@ -84,14 +84,14 @@ final class TransactionTests: BaseTestCase {
|
|||||||
do {
|
do {
|
||||||
|
|
||||||
let updateExpectation = self.expectation(description: "update")
|
let updateExpectation = self.expectation(description: "update")
|
||||||
let hasChanges: Bool = try! stack.perform(
|
let hasChanges: Bool = try stack.perform(
|
||||||
synchronous: { (transaction) in
|
synchronous: { (transaction) in
|
||||||
|
|
||||||
defer {
|
defer {
|
||||||
|
|
||||||
updateExpectation.fulfill()
|
updateExpectation.fulfill()
|
||||||
}
|
}
|
||||||
guard let object = transaction.fetchOne(From<TestEntity1>()) else {
|
guard let object = try transaction.fetchOne(From<TestEntity1>()) else {
|
||||||
// TODO: convert fetch methods to throwing methods
|
// TODO: convert fetch methods to throwing methods
|
||||||
XCTFail()
|
XCTFail()
|
||||||
try transaction.cancel()
|
try transaction.cancel()
|
||||||
@@ -107,9 +107,9 @@ final class TransactionTests: BaseTestCase {
|
|||||||
self.checkExpectationsImmediately()
|
self.checkExpectationsImmediately()
|
||||||
XCTAssertTrue(hasChanges)
|
XCTAssertTrue(hasChanges)
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>()), 1)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>()), 1)
|
||||||
|
|
||||||
let object = stack.fetchOne(From<TestEntity1>())
|
let object = try stack.fetchOne(From<TestEntity1>())
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
||||||
XCTAssertEqual(object?.testString, "string1_edit")
|
XCTAssertEqual(object?.testString, "string1_edit")
|
||||||
@@ -128,7 +128,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
|
|
||||||
deleteExpectation.fulfill()
|
deleteExpectation.fulfill()
|
||||||
}
|
}
|
||||||
let object = transaction.fetchOne(From<TestEntity1>())
|
let object = try transaction.fetchOne(From<TestEntity1>())
|
||||||
transaction.delete(object)
|
transaction.delete(object)
|
||||||
return transaction.hasChanges
|
return transaction.hasChanges
|
||||||
}
|
}
|
||||||
@@ -141,9 +141,9 @@ final class TransactionTests: BaseTestCase {
|
|||||||
}
|
}
|
||||||
self.checkExpectationsImmediately()
|
self.checkExpectationsImmediately()
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>()), 0)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>()), 0)
|
||||||
|
|
||||||
let object = stack.fetchOne(From<TestEntity1>())
|
let object = try stack.fetchOne(From<TestEntity1>())
|
||||||
XCTAssertNil(object)
|
XCTAssertNil(object)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -184,10 +184,10 @@ final class TransactionTests: BaseTestCase {
|
|||||||
}
|
}
|
||||||
self.checkExpectationsImmediately()
|
self.checkExpectationsImmediately()
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>("Config1")), 1)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>("Config1")), 1)
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>(nil)), 0)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>(nil)), 0)
|
||||||
|
|
||||||
let object = stack.fetchOne(From<TestEntity1>("Config1"))
|
let object = try stack.fetchOne(From<TestEntity1>("Config1"))
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
||||||
XCTAssertEqual(object?.testString, "string1")
|
XCTAssertEqual(object?.testString, "string1")
|
||||||
@@ -206,7 +206,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
|
|
||||||
updateExpectation.fulfill()
|
updateExpectation.fulfill()
|
||||||
}
|
}
|
||||||
guard let object = transaction.fetchOne(From<TestEntity1>("Config1")) else {
|
guard let object = try transaction.fetchOne(From<TestEntity1>("Config1")) else {
|
||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
try transaction.cancel()
|
try transaction.cancel()
|
||||||
@@ -226,10 +226,10 @@ final class TransactionTests: BaseTestCase {
|
|||||||
}
|
}
|
||||||
self.checkExpectationsImmediately()
|
self.checkExpectationsImmediately()
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>("Config1")), 1)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>("Config1")), 1)
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>(nil)), 0)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>(nil)), 0)
|
||||||
|
|
||||||
let object = stack.fetchOne(From<TestEntity1>("Config1"))
|
let object = try stack.fetchOne(From<TestEntity1>("Config1"))
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
||||||
XCTAssertEqual(object?.testString, "string1_edit")
|
XCTAssertEqual(object?.testString, "string1_edit")
|
||||||
@@ -248,7 +248,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
|
|
||||||
deleteExpectation.fulfill()
|
deleteExpectation.fulfill()
|
||||||
}
|
}
|
||||||
let object = transaction.fetchOne(From<TestEntity1>("Config1"))
|
let object = try transaction.fetchOne(From<TestEntity1>("Config1"))
|
||||||
transaction.delete(object)
|
transaction.delete(object)
|
||||||
|
|
||||||
return transaction.hasChanges
|
return transaction.hasChanges
|
||||||
@@ -262,8 +262,8 @@ final class TransactionTests: BaseTestCase {
|
|||||||
}
|
}
|
||||||
self.checkExpectationsImmediately()
|
self.checkExpectationsImmediately()
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>("Config1")), 0)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>("Config1")), 0)
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>(nil)), 0)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>(nil)), 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -294,9 +294,9 @@ final class TransactionTests: BaseTestCase {
|
|||||||
)
|
)
|
||||||
self.checkExpectationsImmediately()
|
self.checkExpectationsImmediately()
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>()), 0)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>()), 0)
|
||||||
|
|
||||||
let object = stack.fetchOne(From<TestEntity1>())
|
let object = try stack.fetchOne(From<TestEntity1>())
|
||||||
XCTAssertNil(object)
|
XCTAssertNil(object)
|
||||||
}
|
}
|
||||||
let testDate = Date()
|
let testDate = Date()
|
||||||
@@ -329,7 +329,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
|
|
||||||
updateDiscardExpectation.fulfill()
|
updateDiscardExpectation.fulfill()
|
||||||
}
|
}
|
||||||
guard let object = transaction.fetchOne(From<TestEntity1>()) else {
|
guard let object = try transaction.fetchOne(From<TestEntity1>()) else {
|
||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
try transaction.cancel()
|
try transaction.cancel()
|
||||||
@@ -343,9 +343,9 @@ final class TransactionTests: BaseTestCase {
|
|||||||
)
|
)
|
||||||
self.checkExpectationsImmediately()
|
self.checkExpectationsImmediately()
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>()), 1)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>()), 1)
|
||||||
|
|
||||||
let object = stack.fetchOne(From<TestEntity1>())
|
let object = try stack.fetchOne(From<TestEntity1>())
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
||||||
XCTAssertEqual(object?.testString, "string1")
|
XCTAssertEqual(object?.testString, "string1")
|
||||||
@@ -362,7 +362,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
|
|
||||||
deleteDiscardExpectation.fulfill()
|
deleteDiscardExpectation.fulfill()
|
||||||
}
|
}
|
||||||
guard let object = transaction.fetchOne(From<TestEntity1>()) else {
|
guard let object = try transaction.fetchOne(From<TestEntity1>()) else {
|
||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
try transaction.cancel()
|
try transaction.cancel()
|
||||||
@@ -374,9 +374,9 @@ final class TransactionTests: BaseTestCase {
|
|||||||
)
|
)
|
||||||
self.checkExpectationsImmediately()
|
self.checkExpectationsImmediately()
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>()), 1)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>()), 1)
|
||||||
|
|
||||||
let object = stack.fetchOne(From<TestEntity1>())
|
let object = try stack.fetchOne(From<TestEntity1>())
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
||||||
XCTAssertEqual(object?.testString, "string1")
|
XCTAssertEqual(object?.testString, "string1")
|
||||||
@@ -387,7 +387,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@available(OSX 10.12, *)
|
@available(macOS 10.12, *)
|
||||||
@objc
|
@objc
|
||||||
dynamic func test_ThatSynchronousTransactions_CanCommitWithoutWaitingForMerges() {
|
dynamic func test_ThatSynchronousTransactions_CanCommitWithoutWaitingForMerges() {
|
||||||
|
|
||||||
@@ -396,7 +396,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
let observer = TestListObserver()
|
let observer = TestListObserver()
|
||||||
let monitor = stack.monitorList(
|
let monitor = stack.monitorList(
|
||||||
From<TestEntity1>(),
|
From<TestEntity1>(),
|
||||||
OrderBy(.ascending("testEntityID"))
|
OrderBy<TestEntity1>(.ascending("testEntityID"))
|
||||||
)
|
)
|
||||||
monitor.addObserver(observer)
|
monitor.addObserver(observer)
|
||||||
|
|
||||||
@@ -404,7 +404,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
|
|
||||||
var events = 0
|
var events = 0
|
||||||
let willChangeExpectation = self.expectation(
|
let willChangeExpectation = self.expectation(
|
||||||
forNotification: "listMonitorWillChange:",
|
forNotification: NSNotification.Name(rawValue: "listMonitorWillChange:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -418,7 +418,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
let didInsertObjectExpectation = self.expectation(
|
let didInsertObjectExpectation = self.expectation(
|
||||||
forNotification: "listMonitor:didInsertObject:toIndexPath:",
|
forNotification: NSNotification.Name(rawValue: "listMonitor:didInsertObject:toIndexPath:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -448,7 +448,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
let didChangeExpectation = self.expectation(
|
let didChangeExpectation = self.expectation(
|
||||||
forNotification: "listMonitorDidChange:",
|
forNotification: NSNotification.Name(rawValue: "listMonitorDidChange:"),
|
||||||
object: observer,
|
object: observer,
|
||||||
handler: { (note) -> Bool in
|
handler: { (note) -> Bool in
|
||||||
|
|
||||||
@@ -520,19 +520,26 @@ final class TransactionTests: BaseTestCase {
|
|||||||
success: { (hasChanges) in
|
success: { (hasChanges) in
|
||||||
|
|
||||||
XCTAssertTrue(hasChanges)
|
XCTAssertTrue(hasChanges)
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>()), 1)
|
do {
|
||||||
|
|
||||||
let object = stack.fetchOne(From<TestEntity1>())
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>()), 1)
|
||||||
XCTAssertNotNil(object)
|
|
||||||
XCTAssertEqual(object?.fetchSource()?.unsafeContext(), stack.mainContext)
|
let object = try stack.fetchOne(From<TestEntity1>())
|
||||||
XCTAssertEqual(object?.querySource()?.unsafeContext(), stack.mainContext)
|
XCTAssertNotNil(object)
|
||||||
|
XCTAssertEqual(object?.fetchSource()?.unsafeContext(), stack.mainContext)
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
XCTAssertEqual(object?.querySource()?.unsafeContext(), stack.mainContext)
|
||||||
XCTAssertEqual(object?.testString, "string1")
|
|
||||||
XCTAssertEqual(object?.testNumber, 100)
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
||||||
XCTAssertEqual(object?.testDate, testDate)
|
XCTAssertEqual(object?.testString, "string1")
|
||||||
createExpectation.fulfill()
|
XCTAssertEqual(object?.testNumber, 100)
|
||||||
|
XCTAssertEqual(object?.testDate, testDate)
|
||||||
|
createExpectation.fulfill()
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
|
||||||
|
XCTFail()
|
||||||
|
}
|
||||||
},
|
},
|
||||||
failure: { _ in
|
failure: { _ in
|
||||||
|
|
||||||
@@ -546,7 +553,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
stack.perform(
|
stack.perform(
|
||||||
asynchronous: { (transaction) -> Bool in
|
asynchronous: { (transaction) -> Bool in
|
||||||
|
|
||||||
guard let object = transaction.fetchOne(From<TestEntity1>()) else {
|
guard let object = try transaction.fetchOne(From<TestEntity1>()) else {
|
||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
try transaction.cancel()
|
try transaction.cancel()
|
||||||
@@ -560,16 +567,23 @@ final class TransactionTests: BaseTestCase {
|
|||||||
success: { (hasChanges) in
|
success: { (hasChanges) in
|
||||||
|
|
||||||
XCTAssertTrue(hasChanges)
|
XCTAssertTrue(hasChanges)
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>()), 1)
|
do {
|
||||||
|
|
||||||
let object = stack.fetchOne(From<TestEntity1>())
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>()), 1)
|
||||||
XCTAssertNotNil(object)
|
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
let object = try stack.fetchOne(From<TestEntity1>())
|
||||||
XCTAssertEqual(object?.testString, "string1_edit")
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(object?.testNumber, 200)
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
||||||
XCTAssertEqual(object?.testDate, Date.distantFuture)
|
XCTAssertEqual(object?.testString, "string1_edit")
|
||||||
updateExpectation.fulfill()
|
XCTAssertEqual(object?.testNumber, 200)
|
||||||
|
XCTAssertEqual(object?.testDate, Date.distantFuture)
|
||||||
|
updateExpectation.fulfill()
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
|
||||||
|
XCTFail()
|
||||||
|
}
|
||||||
},
|
},
|
||||||
failure: { _ in
|
failure: { _ in
|
||||||
|
|
||||||
@@ -583,7 +597,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
stack.perform(
|
stack.perform(
|
||||||
asynchronous: { (transaction) -> Bool in
|
asynchronous: { (transaction) -> Bool in
|
||||||
|
|
||||||
let object = transaction.fetchOne(From<TestEntity1>())
|
let object = try transaction.fetchOne(From<TestEntity1>())
|
||||||
transaction.delete(object)
|
transaction.delete(object)
|
||||||
|
|
||||||
return transaction.hasChanges
|
return transaction.hasChanges
|
||||||
@@ -591,12 +605,19 @@ final class TransactionTests: BaseTestCase {
|
|||||||
success: { (hasChanges) in
|
success: { (hasChanges) in
|
||||||
|
|
||||||
XCTAssertTrue(hasChanges)
|
XCTAssertTrue(hasChanges)
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>()), 0)
|
do {
|
||||||
|
|
||||||
let object = stack.fetchOne(From<TestEntity1>())
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>()), 0)
|
||||||
XCTAssertNil(object)
|
|
||||||
deleteExpectation.fulfill()
|
let object = try stack.fetchOne(From<TestEntity1>())
|
||||||
|
XCTAssertNil(object)
|
||||||
|
deleteExpectation.fulfill()
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
|
||||||
|
XCTFail()
|
||||||
|
}
|
||||||
},
|
},
|
||||||
failure: { _ in
|
failure: { _ in
|
||||||
|
|
||||||
@@ -631,17 +652,24 @@ final class TransactionTests: BaseTestCase {
|
|||||||
success: { (hasChanges) in
|
success: { (hasChanges) in
|
||||||
|
|
||||||
XCTAssertTrue(hasChanges)
|
XCTAssertTrue(hasChanges)
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>("Config1")), 1)
|
do {
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>(nil)), 0)
|
|
||||||
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>("Config1")), 1)
|
||||||
let object = stack.fetchOne(From<TestEntity1>("Config1"))
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>(nil)), 0)
|
||||||
XCTAssertNotNil(object)
|
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
let object = try stack.fetchOne(From<TestEntity1>("Config1"))
|
||||||
XCTAssertEqual(object?.testString, "string1")
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(object?.testNumber, 100)
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
||||||
XCTAssertEqual(object?.testDate, testDate)
|
XCTAssertEqual(object?.testString, "string1")
|
||||||
createExpectation.fulfill()
|
XCTAssertEqual(object?.testNumber, 100)
|
||||||
|
XCTAssertEqual(object?.testDate, testDate)
|
||||||
|
createExpectation.fulfill()
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
|
||||||
|
XCTFail()
|
||||||
|
}
|
||||||
},
|
},
|
||||||
failure: { _ in
|
failure: { _ in
|
||||||
|
|
||||||
@@ -655,7 +683,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
stack.perform(
|
stack.perform(
|
||||||
asynchronous: { (transaction) -> Bool in
|
asynchronous: { (transaction) -> Bool in
|
||||||
|
|
||||||
guard let object = transaction.fetchOne(From<TestEntity1>("Config1")) else {
|
guard let object = try transaction.fetchOne(From<TestEntity1>("Config1")) else {
|
||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
try transaction.cancel()
|
try transaction.cancel()
|
||||||
@@ -669,17 +697,24 @@ final class TransactionTests: BaseTestCase {
|
|||||||
success: { (hasChanges) in
|
success: { (hasChanges) in
|
||||||
|
|
||||||
XCTAssertTrue(hasChanges)
|
XCTAssertTrue(hasChanges)
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>("Config1")), 1)
|
do {
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>(nil)), 0)
|
|
||||||
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>("Config1")), 1)
|
||||||
let object = stack.fetchOne(From<TestEntity1>("Config1"))
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>(nil)), 0)
|
||||||
XCTAssertNotNil(object)
|
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
let object = try stack.fetchOne(From<TestEntity1>("Config1"))
|
||||||
XCTAssertEqual(object?.testString, "string1_edit")
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(object?.testNumber, 200)
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
||||||
XCTAssertEqual(object?.testDate, Date.distantFuture)
|
XCTAssertEqual(object?.testString, "string1_edit")
|
||||||
updateExpectation.fulfill()
|
XCTAssertEqual(object?.testNumber, 200)
|
||||||
|
XCTAssertEqual(object?.testDate, Date.distantFuture)
|
||||||
|
updateExpectation.fulfill()
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
|
||||||
|
XCTFail()
|
||||||
|
}
|
||||||
},
|
},
|
||||||
failure: { _ in
|
failure: { _ in
|
||||||
|
|
||||||
@@ -693,7 +728,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
stack.perform(
|
stack.perform(
|
||||||
asynchronous: { (transaction) -> Bool in
|
asynchronous: { (transaction) -> Bool in
|
||||||
|
|
||||||
let object = transaction.fetchOne(From<TestEntity1>("Config1"))
|
let object = try transaction.fetchOne(From<TestEntity1>("Config1"))
|
||||||
transaction.delete(object)
|
transaction.delete(object)
|
||||||
|
|
||||||
return transaction.hasChanges
|
return transaction.hasChanges
|
||||||
@@ -701,11 +736,21 @@ final class TransactionTests: BaseTestCase {
|
|||||||
success: { (hasChanges) in
|
success: { (hasChanges) in
|
||||||
|
|
||||||
XCTAssertTrue(hasChanges)
|
XCTAssertTrue(hasChanges)
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>("Config1")), 0)
|
do {
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>(nil)), 0)
|
|
||||||
|
let configCount = try stack.fetchCount(From<TestEntity1>("Config1"))
|
||||||
deleteExpectation.fulfill()
|
XCTAssertEqual(configCount, 0)
|
||||||
|
|
||||||
|
let defaultCount = try stack.fetchCount(From<TestEntity1>(nil))
|
||||||
|
XCTAssertEqual(defaultCount, 0)
|
||||||
|
|
||||||
|
deleteExpectation.fulfill()
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
|
||||||
|
XCTFail()
|
||||||
|
}
|
||||||
},
|
},
|
||||||
failure: { _ in
|
failure: { _ in
|
||||||
|
|
||||||
@@ -737,7 +782,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
createDiscardExpectation.fulfill()
|
createDiscardExpectation.fulfill()
|
||||||
try transaction.cancel()
|
try transaction.cancel()
|
||||||
},
|
},
|
||||||
success: {
|
success: { _ in
|
||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
},
|
},
|
||||||
@@ -754,8 +799,8 @@ final class TransactionTests: BaseTestCase {
|
|||||||
stack.perform(
|
stack.perform(
|
||||||
asynchronous: { (transaction) -> Bool in
|
asynchronous: { (transaction) -> Bool in
|
||||||
|
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 0)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 0)
|
||||||
XCTAssertNil(transaction.fetchOne(From<TestEntity1>()))
|
XCTAssertNil(try transaction.fetchOne(From<TestEntity1>()))
|
||||||
|
|
||||||
let object = transaction.create(Into<TestEntity1>())
|
let object = transaction.create(Into<TestEntity1>())
|
||||||
object.testEntityID = NSNumber(value: 1)
|
object.testEntityID = NSNumber(value: 1)
|
||||||
@@ -782,7 +827,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
stack.perform(
|
stack.perform(
|
||||||
asynchronous: { (transaction) -> Void in
|
asynchronous: { (transaction) -> Void in
|
||||||
|
|
||||||
guard let object = transaction.fetchOne(From<TestEntity1>()) else {
|
guard let object = try transaction.fetchOne(From<TestEntity1>()) else {
|
||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
return
|
return
|
||||||
@@ -795,7 +840,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
|
|
||||||
try transaction.cancel()
|
try transaction.cancel()
|
||||||
},
|
},
|
||||||
success: {
|
success: { _ in
|
||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
},
|
},
|
||||||
@@ -811,9 +856,9 @@ final class TransactionTests: BaseTestCase {
|
|||||||
stack.perform(
|
stack.perform(
|
||||||
asynchronous: { (transaction) -> Void in
|
asynchronous: { (transaction) -> Void in
|
||||||
|
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 1)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 1)
|
||||||
|
|
||||||
guard let object = transaction.fetchOne(From<TestEntity1>()) else {
|
guard let object = try transaction.fetchOne(From<TestEntity1>()) else {
|
||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
try transaction.cancel()
|
try transaction.cancel()
|
||||||
@@ -828,22 +873,29 @@ final class TransactionTests: BaseTestCase {
|
|||||||
|
|
||||||
try transaction.cancel()
|
try transaction.cancel()
|
||||||
},
|
},
|
||||||
success: {
|
success: { _ in
|
||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
},
|
},
|
||||||
failure: { (error) in
|
failure: { (error) in
|
||||||
|
|
||||||
XCTAssertEqual(error, CoreStoreError.userCancelled)
|
XCTAssertEqual(error, CoreStoreError.userCancelled)
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>()), 1)
|
do {
|
||||||
|
|
||||||
let object = stack.fetchOne(From<TestEntity1>())
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>()), 1)
|
||||||
XCTAssertNotNil(object)
|
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
let object = try stack.fetchOne(From<TestEntity1>())
|
||||||
XCTAssertEqual(object?.testString, "string1")
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(object?.testNumber, 100)
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
||||||
XCTAssertEqual(object?.testDate, testDate)
|
XCTAssertEqual(object?.testString, "string1")
|
||||||
deleteDiscardExpectation.fulfill()
|
XCTAssertEqual(object?.testNumber, 100)
|
||||||
|
XCTAssertEqual(object?.testDate, testDate)
|
||||||
|
deleteDiscardExpectation.fulfill()
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
|
||||||
|
XCTFail()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -878,9 +930,9 @@ final class TransactionTests: BaseTestCase {
|
|||||||
XCTAssertTrue(transaction.hasChanges)
|
XCTAssertTrue(transaction.hasChanges)
|
||||||
try transaction.commitAndWait()
|
try transaction.commitAndWait()
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>()), 1)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>()), 1)
|
||||||
|
|
||||||
let object = stack.fetchOne(From<TestEntity1>())
|
let object = try stack.fetchOne(From<TestEntity1>())
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(object?.fetchSource()?.unsafeContext(), stack.mainContext)
|
XCTAssertEqual(object?.fetchSource()?.unsafeContext(), stack.mainContext)
|
||||||
XCTAssertEqual(object?.querySource()?.unsafeContext(), stack.mainContext)
|
XCTAssertEqual(object?.querySource()?.unsafeContext(), stack.mainContext)
|
||||||
@@ -897,7 +949,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
guard let object = transaction.fetchOne(From<TestEntity1>()) else {
|
guard let object = try transaction.fetchOne(From<TestEntity1>()) else {
|
||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
return
|
return
|
||||||
@@ -911,9 +963,9 @@ final class TransactionTests: BaseTestCase {
|
|||||||
XCTAssertTrue(transaction.hasChanges)
|
XCTAssertTrue(transaction.hasChanges)
|
||||||
try transaction.commitAndWait()
|
try transaction.commitAndWait()
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>()), 1)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>()), 1)
|
||||||
|
|
||||||
let object = stack.fetchOne(From<TestEntity1>())
|
let object = try stack.fetchOne(From<TestEntity1>())
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
||||||
XCTAssertEqual(object?.testString, "string1_edit")
|
XCTAssertEqual(object?.testString, "string1_edit")
|
||||||
@@ -927,7 +979,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let object = transaction.fetchOne(From<TestEntity1>())
|
let object = try transaction.fetchOne(From<TestEntity1>())
|
||||||
transaction.delete(object)
|
transaction.delete(object)
|
||||||
|
|
||||||
do {
|
do {
|
||||||
@@ -935,8 +987,8 @@ final class TransactionTests: BaseTestCase {
|
|||||||
XCTAssertTrue(transaction.hasChanges)
|
XCTAssertTrue(transaction.hasChanges)
|
||||||
try transaction.commitAndWait()
|
try transaction.commitAndWait()
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>()), 0)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>()), 0)
|
||||||
XCTAssertNil(stack.fetchOne(From<TestEntity1>()))
|
XCTAssertNil(try stack.fetchOne(From<TestEntity1>()))
|
||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
|
|
||||||
@@ -967,10 +1019,10 @@ final class TransactionTests: BaseTestCase {
|
|||||||
XCTAssertTrue(transaction.hasChanges)
|
XCTAssertTrue(transaction.hasChanges)
|
||||||
try transaction.commitAndWait()
|
try transaction.commitAndWait()
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>("Config1")), 1)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>("Config1")), 1)
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>(nil)), 0)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>(nil)), 0)
|
||||||
|
|
||||||
let object = stack.fetchOne(From<TestEntity1>("Config1"))
|
let object = try stack.fetchOne(From<TestEntity1>("Config1"))
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
||||||
XCTAssertEqual(object?.testString, "string1")
|
XCTAssertEqual(object?.testString, "string1")
|
||||||
@@ -984,7 +1036,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
guard let object = transaction.fetchOne(From<TestEntity1>("Config1")) else {
|
guard let object = try transaction.fetchOne(From<TestEntity1>("Config1")) else {
|
||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
return
|
return
|
||||||
@@ -998,10 +1050,10 @@ final class TransactionTests: BaseTestCase {
|
|||||||
XCTAssertTrue(transaction.hasChanges)
|
XCTAssertTrue(transaction.hasChanges)
|
||||||
try transaction.commitAndWait()
|
try transaction.commitAndWait()
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>("Config1")), 1)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>("Config1")), 1)
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>(nil)), 0)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>(nil)), 0)
|
||||||
|
|
||||||
let object = stack.fetchOne(From<TestEntity1>("Config1"))
|
let object = try stack.fetchOne(From<TestEntity1>("Config1"))
|
||||||
XCTAssertNotNil(object)
|
XCTAssertNotNil(object)
|
||||||
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
XCTAssertEqual(object?.testEntityID, NSNumber(value: 1))
|
||||||
XCTAssertEqual(object?.testString, "string1_edit")
|
XCTAssertEqual(object?.testString, "string1_edit")
|
||||||
@@ -1015,7 +1067,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let object = transaction.fetchOne(From<TestEntity1>("Config1"))
|
let object = try transaction.fetchOne(From<TestEntity1>("Config1"))
|
||||||
transaction.delete(object)
|
transaction.delete(object)
|
||||||
|
|
||||||
do {
|
do {
|
||||||
@@ -1023,8 +1075,8 @@ final class TransactionTests: BaseTestCase {
|
|||||||
XCTAssertTrue(transaction.hasChanges)
|
XCTAssertTrue(transaction.hasChanges)
|
||||||
try transaction.commitAndWait()
|
try transaction.commitAndWait()
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>("Config1")), 0)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>("Config1")), 0)
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>(nil)), 0)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>(nil)), 0)
|
||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
|
|
||||||
@@ -1050,11 +1102,11 @@ final class TransactionTests: BaseTestCase {
|
|||||||
|
|
||||||
transaction.rollback()
|
transaction.rollback()
|
||||||
|
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 0)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 0)
|
||||||
XCTAssertNil(transaction.fetchOne(From<TestEntity1>()))
|
XCTAssertNil(try transaction.fetchOne(From<TestEntity1>()))
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>()), 0)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>()), 0)
|
||||||
XCTAssertNil(stack.fetchOne(From<TestEntity1>()))
|
XCTAssertNil(try stack.fetchOne(From<TestEntity1>()))
|
||||||
}
|
}
|
||||||
|
|
||||||
let testDate = Date()
|
let testDate = Date()
|
||||||
@@ -1079,7 +1131,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
guard let object = transaction.fetchOne(From<TestEntity1>()) else {
|
guard let object = try transaction.fetchOne(From<TestEntity1>()) else {
|
||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
return
|
return
|
||||||
@@ -1090,8 +1142,8 @@ final class TransactionTests: BaseTestCase {
|
|||||||
|
|
||||||
transaction.rollback()
|
transaction.rollback()
|
||||||
|
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 1)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 1)
|
||||||
if let object = transaction.fetchOne(From<TestEntity1>()) {
|
if let object = try transaction.fetchOne(From<TestEntity1>()) {
|
||||||
|
|
||||||
XCTAssertEqual(object.testEntityID, NSNumber(value: 1))
|
XCTAssertEqual(object.testEntityID, NSNumber(value: 1))
|
||||||
XCTAssertEqual(object.testString, "string1")
|
XCTAssertEqual(object.testString, "string1")
|
||||||
@@ -1103,8 +1155,8 @@ final class TransactionTests: BaseTestCase {
|
|||||||
XCTFail()
|
XCTFail()
|
||||||
}
|
}
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>()), 1)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>()), 1)
|
||||||
if let object = stack.fetchOne(From<TestEntity1>()) {
|
if let object = try stack.fetchOne(From<TestEntity1>()) {
|
||||||
|
|
||||||
XCTAssertEqual(object.testEntityID, NSNumber(value: 1))
|
XCTAssertEqual(object.testEntityID, NSNumber(value: 1))
|
||||||
XCTAssertEqual(object.testString, "string1")
|
XCTAssertEqual(object.testString, "string1")
|
||||||
@@ -1119,7 +1171,7 @@ final class TransactionTests: BaseTestCase {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
guard let object = transaction.fetchOne(From<TestEntity1>()) else {
|
guard let object = try transaction.fetchOne(From<TestEntity1>()) else {
|
||||||
|
|
||||||
XCTFail()
|
XCTFail()
|
||||||
return
|
return
|
||||||
@@ -1128,8 +1180,8 @@ final class TransactionTests: BaseTestCase {
|
|||||||
|
|
||||||
transaction.rollback()
|
transaction.rollback()
|
||||||
|
|
||||||
XCTAssertEqual(transaction.fetchCount(From<TestEntity1>()), 1)
|
XCTAssertEqual(try transaction.fetchCount(From<TestEntity1>()), 1)
|
||||||
if let object = transaction.fetchOne(From<TestEntity1>()) {
|
if let object = try transaction.fetchOne(From<TestEntity1>()) {
|
||||||
|
|
||||||
XCTAssertEqual(object.testEntityID, NSNumber(value: 1))
|
XCTAssertEqual(object.testEntityID, NSNumber(value: 1))
|
||||||
XCTAssertEqual(object.testString, "string1")
|
XCTAssertEqual(object.testString, "string1")
|
||||||
@@ -1141,8 +1193,8 @@ final class TransactionTests: BaseTestCase {
|
|||||||
XCTFail()
|
XCTFail()
|
||||||
}
|
}
|
||||||
|
|
||||||
XCTAssertEqual(stack.fetchCount(From<TestEntity1>()), 1)
|
XCTAssertEqual(try stack.fetchCount(From<TestEntity1>()), 1)
|
||||||
if let object = stack.fetchOne(From<TestEntity1>()) {
|
if let object = try stack.fetchOne(From<TestEntity1>()) {
|
||||||
|
|
||||||
XCTAssertEqual(object.testEntityID, NSNumber(value: 1))
|
XCTAssertEqual(object.testEntityID, NSNumber(value: 1))
|
||||||
XCTAssertEqual(object.testString, "string1")
|
XCTAssertEqual(object.testString, "string1")
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// TweakTests.swift
|
// TweakTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// WhereTests.swift
|
// WhereTests.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -31,12 +31,12 @@ import CoreStore
|
|||||||
|
|
||||||
// MARK: - XCTAssertAllEqual
|
// MARK: - XCTAssertAllEqual
|
||||||
|
|
||||||
private func XCTAssertAllEqual(_ whereClauses: Where...) {
|
private func XCTAssertAllEqual<D>(_ whereClauses: Where<D>...) {
|
||||||
|
|
||||||
XCTAssertAllEqual(whereClauses)
|
XCTAssertAllEqual(whereClauses)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func XCTAssertAllEqual(_ whereClauses: [Where]) {
|
private func XCTAssertAllEqual<D>(_ whereClauses: [Where<D>]) {
|
||||||
|
|
||||||
for i in whereClauses.indices {
|
for i in whereClauses.indices {
|
||||||
|
|
||||||
@@ -52,56 +52,62 @@ private func XCTAssertAllEqual(_ whereClauses: [Where]) {
|
|||||||
|
|
||||||
final class WhereTests: XCTestCase {
|
final class WhereTests: XCTestCase {
|
||||||
|
|
||||||
|
@objc
|
||||||
|
dynamic func test_ThatDynamicModelKeyPaths_CanBeCreated() {
|
||||||
|
|
||||||
|
XCTAssertEqual(String(keyPath: \TestEntity1.testEntityID), "testEntityID")
|
||||||
|
}
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
dynamic func test_ThatWhereClauses_ConfigureCorrectly() {
|
dynamic func test_ThatWhereClauses_ConfigureCorrectly() {
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let whereClause = Where()
|
let whereClause = Where<NSManagedObject>()
|
||||||
XCTAssertEqual(whereClause, Where(true))
|
XCTAssertEqual(whereClause, Where<NSManagedObject>(true))
|
||||||
XCTAssertNotEqual(whereClause, Where(false))
|
XCTAssertNotEqual(whereClause, Where<NSManagedObject>(false))
|
||||||
XCTAssertEqual(whereClause.predicate, NSPredicate(value: true))
|
XCTAssertEqual(whereClause.predicate, NSPredicate(value: true))
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let whereClause = Where(true)
|
let whereClause = Where<NSManagedObject>(true)
|
||||||
XCTAssertEqual(whereClause, Where())
|
XCTAssertEqual(whereClause, Where<NSManagedObject>())
|
||||||
XCTAssertNotEqual(whereClause, Where(false))
|
XCTAssertNotEqual(whereClause, Where<NSManagedObject>(false))
|
||||||
XCTAssertEqual(whereClause.predicate, NSPredicate(value: true))
|
XCTAssertEqual(whereClause.predicate, NSPredicate(value: true))
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let predicate = NSPredicate(format: "%K == %@", "key", "value")
|
let predicate = NSPredicate(format: "%K == %@", "key", "value")
|
||||||
let whereClause = Where(predicate)
|
let whereClause = Where<NSManagedObject>(predicate)
|
||||||
XCTAssertEqual(whereClause, Where(predicate))
|
XCTAssertEqual(whereClause, Where<NSManagedObject>(predicate))
|
||||||
XCTAssertEqual(whereClause.predicate, predicate)
|
XCTAssertEqual(whereClause.predicate, predicate)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let whereClause = Where("%K == %@", "key", "value")
|
let whereClause = Where<NSManagedObject>("%K == %@", "key", "value")
|
||||||
let predicate = NSPredicate(format: "%K == %@", "key", "value")
|
let predicate = NSPredicate(format: "%K == %@", "key", "value")
|
||||||
XCTAssertEqual(whereClause, Where(predicate))
|
XCTAssertEqual(whereClause, Where<NSManagedObject>(predicate))
|
||||||
XCTAssertEqual(whereClause.predicate, predicate)
|
XCTAssertEqual(whereClause.predicate, predicate)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let whereClause = Where("%K == %@", argumentArray: ["key", "value"])
|
let whereClause = Where<NSManagedObject>("%K == %@", argumentArray: ["key", "value"])
|
||||||
let predicate = NSPredicate(format: "%K == %@", "key", "value")
|
let predicate = NSPredicate(format: "%K == %@", "key", "value")
|
||||||
XCTAssertEqual(whereClause, Where(predicate))
|
XCTAssertEqual(whereClause, Where<NSManagedObject>(predicate))
|
||||||
XCTAssertEqual(whereClause.predicate, predicate)
|
XCTAssertEqual(whereClause.predicate, predicate)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let whereClause = Where("key", isEqualTo: "value")
|
let whereClause = Where<NSManagedObject>("key", isEqualTo: "value")
|
||||||
let predicate = NSPredicate(format: "%K == %@", "key", "value")
|
let predicate = NSPredicate(format: "%K == %@", "key", "value")
|
||||||
XCTAssertEqual(whereClause, Where(predicate))
|
XCTAssertEqual(whereClause, Where<NSManagedObject>(predicate))
|
||||||
XCTAssertEqual(whereClause.predicate, predicate)
|
XCTAssertEqual(whereClause.predicate, predicate)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let whereClause = Where("key", isMemberOf: ["value1", "value2", "value3"])
|
let whereClause = Where<NSManagedObject>("key", isMemberOf: ["value1", "value2", "value3"])
|
||||||
let predicate = NSPredicate(format: "%K IN %@", "key", ["value1", "value2", "value3"])
|
let predicate = NSPredicate(format: "%K IN %@", "key", ["value1", "value2", "value3"])
|
||||||
XCTAssertEqual(whereClause, Where(predicate))
|
XCTAssertEqual(whereClause, Where<NSManagedObject>(predicate))
|
||||||
XCTAssertEqual(whereClause.predicate, predicate)
|
XCTAssertEqual(whereClause.predicate, predicate)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -113,112 +119,112 @@ final class WhereTests: XCTestCase {
|
|||||||
|
|
||||||
let value: Int = 100
|
let value: Int = 100
|
||||||
XCTAssertAllEqual(
|
XCTAssertAllEqual(
|
||||||
Where("%K == %d", "key", value),
|
Where<NSManagedObject>("%K == %d", "key", value),
|
||||||
Where("%K == %d", "key", value as AnyObject),
|
Where<NSManagedObject>("%K == %d", "key", value as AnyObject),
|
||||||
Where("%K == %d", "key", NSNumber(value: value)),
|
Where<NSManagedObject>("%K == %d", "key", NSNumber(value: value)),
|
||||||
Where("%K == %@", "key", value),
|
Where<NSManagedObject>("%K == %@", "key", value),
|
||||||
Where("%K == %@", "key", value as AnyObject),
|
Where<NSManagedObject>("%K == %@", "key", value as AnyObject),
|
||||||
Where("%K == %@", "key", NSNumber(value: value)),
|
Where<NSManagedObject>("%K == %@", "key", NSNumber(value: value)),
|
||||||
Where("key", isEqualTo: value),
|
Where<NSManagedObject>("key", isEqualTo: value),
|
||||||
Where("key", isEqualTo: NSNumber(value: value))
|
Where<NSManagedObject>("key", isEqualTo: NSNumber(value: value))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let value = NSNumber(value: 100)
|
let value = NSNumber(value: 100)
|
||||||
XCTAssertAllEqual(
|
XCTAssertAllEqual(
|
||||||
Where("%K == %d", "key", value),
|
Where<NSManagedObject>("%K == %d", "key", value),
|
||||||
Where("%K == %d", "key", value as AnyObject),
|
Where<NSManagedObject>("%K == %d", "key", value as AnyObject),
|
||||||
Where("%K == %d", "key", value.intValue),
|
Where<NSManagedObject>("%K == %d", "key", value.intValue),
|
||||||
Where("%K == %@", "key", value),
|
Where<NSManagedObject>("%K == %@", "key", value),
|
||||||
Where("%K == %@", "key", value as AnyObject),
|
Where<NSManagedObject>("%K == %@", "key", value as AnyObject),
|
||||||
Where("%K == %@", "key", value.intValue),
|
Where<NSManagedObject>("%K == %@", "key", value.intValue),
|
||||||
Where("key", isEqualTo: value),
|
Where<NSManagedObject>("key", isEqualTo: value),
|
||||||
Where("key", isEqualTo: value.intValue)
|
Where<NSManagedObject>("key", isEqualTo: value.intValue)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let value: Int64 = Int64.max
|
let value: Int64 = Int64.max
|
||||||
XCTAssertAllEqual(
|
XCTAssertAllEqual(
|
||||||
Where("%K == %d", "key", value),
|
Where<NSManagedObject>("%K == %d", "key", value),
|
||||||
Where("%K == %d", "key", value as AnyObject),
|
Where<NSManagedObject>("%K == %d", "key", value as AnyObject),
|
||||||
Where("%K == %d", "key", NSNumber(value: value)),
|
Where<NSManagedObject>("%K == %d", "key", NSNumber(value: value)),
|
||||||
Where("%K == %@", "key", value),
|
Where<NSManagedObject>("%K == %@", "key", value),
|
||||||
Where("%K == %@", "key", value as AnyObject),
|
Where<NSManagedObject>("%K == %@", "key", value as AnyObject),
|
||||||
Where("%K == %@", "key", NSNumber(value: value)),
|
Where<NSManagedObject>("%K == %@", "key", NSNumber(value: value)),
|
||||||
Where("key", isEqualTo: value),
|
Where<NSManagedObject>("key", isEqualTo: value),
|
||||||
Where("key", isEqualTo: NSNumber(value: value))
|
Where<NSManagedObject>("key", isEqualTo: NSNumber(value: value))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let value = NSNumber(value: Int64.max)
|
let value = NSNumber(value: Int64.max)
|
||||||
XCTAssertAllEqual(
|
XCTAssertAllEqual(
|
||||||
Where("%K == %d", "key", value),
|
Where<NSManagedObject>("%K == %d", "key", value),
|
||||||
Where("%K == %d", "key", value as AnyObject),
|
Where<NSManagedObject>("%K == %d", "key", value as AnyObject),
|
||||||
Where("%K == %d", "key", value.int64Value),
|
Where<NSManagedObject>("%K == %d", "key", value.int64Value),
|
||||||
Where("%K == %@", "key", value),
|
Where<NSManagedObject>("%K == %@", "key", value),
|
||||||
Where("%K == %@", "key", value as AnyObject),
|
Where<NSManagedObject>("%K == %@", "key", value as AnyObject),
|
||||||
Where("%K == %@", "key", value.int64Value),
|
Where<NSManagedObject>("%K == %@", "key", value.int64Value),
|
||||||
Where("key", isEqualTo: value),
|
Where<NSManagedObject>("key", isEqualTo: value),
|
||||||
Where("key", isEqualTo: value.int64Value)
|
Where<NSManagedObject>("key", isEqualTo: value.int64Value)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let value: String = "value"
|
let value: String = "value"
|
||||||
XCTAssertAllEqual(
|
XCTAssertAllEqual(
|
||||||
Where("%K == %s", "key", value),
|
Where<NSManagedObject>("%K == %s", "key", value),
|
||||||
Where("%K == %s", "key", value as AnyObject),
|
Where<NSManagedObject>("%K == %s", "key", value as AnyObject),
|
||||||
Where("%K == %s", "key", NSString(string: value)),
|
Where<NSManagedObject>("%K == %s", "key", NSString(string: value)),
|
||||||
Where("%K == %@", "key", value),
|
Where<NSManagedObject>("%K == %@", "key", value),
|
||||||
Where("%K == %@", "key", value as AnyObject),
|
Where<NSManagedObject>("%K == %@", "key", value as AnyObject),
|
||||||
Where("%K == %@", "key", NSString(string: value)),
|
Where<NSManagedObject>("%K == %@", "key", NSString(string: value)),
|
||||||
Where("key", isEqualTo: value),
|
Where<NSManagedObject>("key", isEqualTo: value),
|
||||||
Where("key", isEqualTo: value as NSString),
|
Where<NSManagedObject>("key", isEqualTo: value as NSString),
|
||||||
Where("key", isEqualTo: NSString(string: value))
|
Where<NSManagedObject>("key", isEqualTo: NSString(string: value))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let value = NSString(string: "value")
|
let value = NSString(string: "value")
|
||||||
XCTAssertAllEqual(
|
XCTAssertAllEqual(
|
||||||
Where("%K == %s", "key", value),
|
Where<NSManagedObject>("%K == %s", "key", value),
|
||||||
Where("%K == %s", "key", value as String),
|
Where<NSManagedObject>("%K == %s", "key", value as String),
|
||||||
Where("%K == %s", "key", value as String as AnyObject),
|
Where<NSManagedObject>("%K == %s", "key", value as String as AnyObject),
|
||||||
Where("%K == %@", "key", value),
|
Where<NSManagedObject>("%K == %@", "key", value),
|
||||||
Where("%K == %@", "key", value as String),
|
Where<NSManagedObject>("%K == %@", "key", value as String),
|
||||||
Where("%K == %@", "key", value as String as AnyObject),
|
Where<NSManagedObject>("%K == %@", "key", value as String as AnyObject),
|
||||||
Where("key", isEqualTo: value),
|
Where<NSManagedObject>("key", isEqualTo: value),
|
||||||
Where("key", isEqualTo: value as String),
|
Where<NSManagedObject>("key", isEqualTo: value as String),
|
||||||
Where("key", isEqualTo: value as String as NSString)
|
Where<NSManagedObject>("key", isEqualTo: value as String as NSString)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let value: [Int] = [100, 200]
|
let value: [Int] = [100, 200]
|
||||||
XCTAssertAllEqual(
|
XCTAssertAllEqual(
|
||||||
Where("%K IN %@", "key", value),
|
Where<NSManagedObject>("%K IN %@", "key", value),
|
||||||
Where("%K IN %@", "key", value as AnyObject),
|
Where<NSManagedObject>("%K IN %@", "key", value as AnyObject),
|
||||||
Where("%K IN %@", "key", value as [AnyObject]),
|
Where<NSManagedObject>("%K IN %@", "key", value as [AnyObject]),
|
||||||
Where("%K IN %@", "key", value as NSArray),
|
Where<NSManagedObject>("%K IN %@", "key", value as NSArray),
|
||||||
Where("%K IN %@", "key", NSArray(array: value)),
|
Where<NSManagedObject>("%K IN %@", "key", NSArray(array: value)),
|
||||||
Where("%K IN %@", "key", value as AnyObject as! NSArray),
|
Where<NSManagedObject>("%K IN %@", "key", value as AnyObject as! NSArray),
|
||||||
Where("key", isMemberOf: value)
|
Where<NSManagedObject>("key", isMemberOf: value)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let value: [Int64] = [Int64.min, 100, Int64.max]
|
let value: [Int64] = [Int64.min, 100, Int64.max]
|
||||||
XCTAssertAllEqual(
|
XCTAssertAllEqual(
|
||||||
Where("%K IN %@", "key", value),
|
Where<NSManagedObject>("%K IN %@", "key", value),
|
||||||
Where("%K IN %@", "key", value as AnyObject),
|
Where<NSManagedObject>("%K IN %@", "key", value as AnyObject),
|
||||||
Where("%K IN %@", "key", value as [AnyObject]),
|
Where<NSManagedObject>("%K IN %@", "key", value as [AnyObject]),
|
||||||
Where("%K IN %@", "key", value as NSArray),
|
Where<NSManagedObject>("%K IN %@", "key", value as NSArray),
|
||||||
Where("%K IN %@", "key", NSArray(array: value)),
|
Where<NSManagedObject>("%K IN %@", "key", NSArray(array: value)),
|
||||||
Where("%K IN %@", "key", value as AnyObject as! NSArray),
|
Where<NSManagedObject>("%K IN %@", "key", value as AnyObject as! NSArray),
|
||||||
Where("key", isMemberOf: value)
|
Where<NSManagedObject>("key", isMemberOf: value)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -226,9 +232,9 @@ final class WhereTests: XCTestCase {
|
|||||||
@objc
|
@objc
|
||||||
dynamic func test_ThatWhereClauseOperations_ComputeCorrectly() {
|
dynamic func test_ThatWhereClauseOperations_ComputeCorrectly() {
|
||||||
|
|
||||||
let whereClause1 = Where("key1", isEqualTo: "value1")
|
let whereClause1 = Where<NSManagedObject>("key1", isEqualTo: "value1")
|
||||||
let whereClause2 = Where("key2", isEqualTo: "value2")
|
let whereClause2 = Where<NSManagedObject>("key2", isEqualTo: "value2")
|
||||||
let whereClause3 = Where("key3", isEqualTo: "value3")
|
let whereClause3 = Where<NSManagedObject>("key3", isEqualTo: "value3")
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
@@ -256,6 +262,21 @@ final class WhereTests: XCTestCase {
|
|||||||
XCTAssertEqual(andWhere.predicate, andPredicate)
|
XCTAssertEqual(andWhere.predicate, andPredicate)
|
||||||
XCTAssertEqual(andWhere, whereClause1 && whereClause2 && whereClause3)
|
XCTAssertEqual(andWhere, whereClause1 && whereClause2 && whereClause3)
|
||||||
}
|
}
|
||||||
|
do {
|
||||||
|
|
||||||
|
let andWhere = whereClause1 && whereClause2 && whereClause3
|
||||||
|
let noneWhere: Where<NSManagedObject>? = nil
|
||||||
|
let someWhere: Where<NSManagedObject>? = Where<NSManagedObject>("key4", isEqualTo: "value4")
|
||||||
|
|
||||||
|
|
||||||
|
let finalNoneWhere = andWhere &&? noneWhere
|
||||||
|
let finalSomeWhere = andWhere &&? someWhere
|
||||||
|
let unwrappedFinalSomeWhere = andWhere && someWhere!
|
||||||
|
|
||||||
|
|
||||||
|
XCTAssertEqual(andWhere.predicate, finalNoneWhere.predicate)
|
||||||
|
XCTAssertEqual(finalSomeWhere.predicate, unwrappedFinalSomeWhere.predicate)
|
||||||
|
}
|
||||||
do {
|
do {
|
||||||
|
|
||||||
let orWhere = whereClause1 || whereClause2 || whereClause3
|
let orWhere = whereClause1 || whereClause2 || whereClause3
|
||||||
@@ -272,12 +293,27 @@ final class WhereTests: XCTestCase {
|
|||||||
XCTAssertEqual(orWhere.predicate, orPredicate)
|
XCTAssertEqual(orWhere.predicate, orPredicate)
|
||||||
XCTAssertEqual(orWhere, whereClause1 || whereClause2 || whereClause3)
|
XCTAssertEqual(orWhere, whereClause1 || whereClause2 || whereClause3)
|
||||||
}
|
}
|
||||||
|
do {
|
||||||
|
|
||||||
|
let orWhere = whereClause1 || whereClause2 || whereClause3
|
||||||
|
let noneWhere: Where<NSManagedObject>? = nil
|
||||||
|
let someWhere: Where<NSManagedObject>? = Where<NSManagedObject>("key4", isEqualTo: "value4")
|
||||||
|
|
||||||
|
|
||||||
|
let finalNoneWhere = orWhere &&? noneWhere
|
||||||
|
let finalSomeWhere = orWhere &&? someWhere
|
||||||
|
let unwrappedFinalSomeWhere = orWhere && someWhere!
|
||||||
|
|
||||||
|
XCTAssertEqual(orWhere.predicate, finalNoneWhere.predicate)
|
||||||
|
XCTAssertEqual(finalSomeWhere.predicate, unwrappedFinalSomeWhere.predicate)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
dynamic func test_ThatWhereClauses_ApplyToFetchRequestsCorrectly() {
|
dynamic func test_ThatWhereClauses_ApplyToFetchRequestsCorrectly() {
|
||||||
|
|
||||||
let whereClause = Where("key", isEqualTo: "value")
|
let whereClause = Where<NSManagedObject>("key", isEqualTo: "value")
|
||||||
let request = CoreStoreFetchRequest()
|
let request = CoreStoreFetchRequest()
|
||||||
whereClause.applyToFetchRequest(request)
|
whereClause.applyToFetchRequest(request)
|
||||||
XCTAssertNotNil(request.predicate)
|
XCTAssertNotNil(request.predicate)
|
||||||
|
|||||||
2
LICENSE
2
LICENSE
@@ -1,6 +1,6 @@
|
|||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
Copyright © 2014 John Rommel Estropia
|
Copyright © 2018 John Rommel Estropia
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// Package.swift
|
// Package.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -28,7 +28,7 @@ import PackageDescription
|
|||||||
let targets: [Target]
|
let targets: [Target]
|
||||||
#if os(iOS)
|
#if os(iOS)
|
||||||
targets = [Target(name: "CoreStore iOS")]
|
targets = [Target(name: "CoreStore iOS")]
|
||||||
#elseif os(OSX)
|
#elseif os(macOS)
|
||||||
targets = [Target(name: "CoreStore OSX")]
|
targets = [Target(name: "CoreStore OSX")]
|
||||||
#elseif os(watchOS)
|
#elseif os(watchOS)
|
||||||
targets = [Target(name: "CoreStore watchOS")]
|
targets = [Target(name: "CoreStore watchOS")]
|
||||||
|
|||||||
53
Playground.playground/Contents.swift
Normal file
53
Playground.playground/Contents.swift
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
import UIKit
|
||||||
|
import CoreStore
|
||||||
|
|
||||||
|
/// Model Declaration =====
|
||||||
|
class Animal: CoreStoreObject {
|
||||||
|
let species = Value.Required<String>("species", initial: "Swift")
|
||||||
|
let master = Relationship.ToOne<Person>("master")
|
||||||
|
let color = Transformable.Optional<UIColor>("color", initial: .orange)
|
||||||
|
}
|
||||||
|
|
||||||
|
class Person: CoreStoreObject {
|
||||||
|
let name = Value.Optional<String>("name")
|
||||||
|
let pets = Relationship.ToManyUnordered<Animal>("pets", inverse: { $0.master })
|
||||||
|
}
|
||||||
|
/// =======================
|
||||||
|
|
||||||
|
/// Stack setup ===========
|
||||||
|
let dataStack = DataStack(
|
||||||
|
CoreStoreSchema(
|
||||||
|
modelVersion: "V1",
|
||||||
|
entities: [
|
||||||
|
Entity<Animal>("Animal"),
|
||||||
|
Entity<Person>("Person")
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
try dataStack.addStorageAndWait(SQLiteStore(fileName: "data.sqlite"))
|
||||||
|
/// =======================
|
||||||
|
|
||||||
|
/// Transactions ==========
|
||||||
|
dataStack.perform(synchronous: { transaction in
|
||||||
|
|
||||||
|
let animal = transaction.create(Into<Animal>())
|
||||||
|
animal.species .= "Sparrow"
|
||||||
|
animal.color .= .yellow
|
||||||
|
|
||||||
|
let person = transaction.create(Into<Person>())
|
||||||
|
person.name .= "John"
|
||||||
|
person.pets.value.insert(animal)
|
||||||
|
})
|
||||||
|
/// =======================
|
||||||
|
|
||||||
|
/// Accessing Objects =====
|
||||||
|
let bird = dataStack.fetchOne(From<Animal>().where(\.species == "Sparrow"))!
|
||||||
|
bird.species.value
|
||||||
|
bird.color.value
|
||||||
|
print(bird)
|
||||||
|
|
||||||
|
let owner = bird.master.value!
|
||||||
|
owner.name.value
|
||||||
|
owner.pets.count
|
||||||
|
print(owner)
|
||||||
|
/// =======================
|
||||||
4
Playground.playground/contents.xcplayground
Normal file
4
Playground.playground/contents.xcplayground
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<playground version='5.0' target-platform='ios' executeOnSourceChanges='false'>
|
||||||
|
<timeline fileName='timeline.xctimeline'/>
|
||||||
|
</playground>
|
||||||
4
Playground.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
4
Playground.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Workspace
|
||||||
|
version = "1.0">
|
||||||
|
</Workspace>
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
// AsynchronousDataTransaction.swift
|
// AsynchronousDataTransaction.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2015 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -30,17 +30,43 @@ import CoreData
|
|||||||
// MARK: - AsynchronousDataTransaction
|
// MARK: - AsynchronousDataTransaction
|
||||||
|
|
||||||
/**
|
/**
|
||||||
The `AsynchronousDataTransaction` provides an interface for `NSManagedObject` creates, updates, and deletes. A transaction object should typically be only used from within a transaction block initiated from `DataStack.beginAsynchronous(_:)`, or from `CoreStore.beginAsynchronous(_:)`.
|
The `AsynchronousDataTransaction` provides an interface for `DynamicObject` creates, updates, and deletes. A transaction object should typically be only used from within a transaction block initiated from `DataStack.perform(asynchronous:...)`, or from `CoreStore.perform(synchronous:...)`.
|
||||||
*/
|
*/
|
||||||
public final class AsynchronousDataTransaction: BaseDataTransaction {
|
public final class AsynchronousDataTransaction: BaseDataTransaction {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Cancels a transaction by throwing `CoreStoreError.userCancelled`.
|
||||||
|
```
|
||||||
|
try transaction.cancel()
|
||||||
|
```
|
||||||
|
- Important: Never use `try?` or `try!` on a `cancel()` call. Always use `try`. Using `try?` will swallow the cancellation and the transaction will proceed to commit as normal. Using `try!` will crash the app as `cancel()` will *always* throw an error.
|
||||||
|
*/
|
||||||
|
public func cancel() throws -> Never {
|
||||||
|
|
||||||
|
throw CoreStoreError.userCancelled
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// MARK: - Result
|
// MARK: - Result
|
||||||
|
|
||||||
|
/**
|
||||||
|
The `Result` contains the success or failure information for a completed transaction
|
||||||
|
*/
|
||||||
public enum Result<T> {
|
public enum Result<T> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
`Result<T>.success` indicates that the transaction succeeded, either because the save succeeded or because there were no changes to save. The associated `userInfo` is the value returned from the transaction closure.
|
||||||
|
*/
|
||||||
case success(userInfo: T)
|
case success(userInfo: T)
|
||||||
|
|
||||||
|
/**
|
||||||
|
`Result<T>.failure` indicates that the transaction either failed or was cancelled. The associated object for this value is a `CoreStoreError` enum value.
|
||||||
|
*/
|
||||||
case failure(error: CoreStoreError)
|
case failure(error: CoreStoreError)
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns `true` if the result indicates `.success`, `false` if the result is `.failure`.
|
||||||
|
*/
|
||||||
public var boolValue: Bool {
|
public var boolValue: Bool {
|
||||||
|
|
||||||
switch self {
|
switch self {
|
||||||
@@ -64,22 +90,8 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// MARK: -
|
// MARK: -
|
||||||
|
|
||||||
/**
|
|
||||||
Cancels a transaction by throwing `CoreStoreError.userCancelled`.
|
|
||||||
```
|
|
||||||
try transaction.cancel()
|
|
||||||
```
|
|
||||||
- Important: Never use `try?` or `try!` on a `cancel()` call. Always use `try`. Using `try?` will swallow the cancellation and the transaction will proceed to commit as normal. Using `try!` will crash the app as `cancel()` will *always* throw an error.
|
|
||||||
*/
|
|
||||||
public func cancel() throws -> Never {
|
|
||||||
|
|
||||||
throw CoreStoreError.userCancelled
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// MARK: BaseDataTransaction
|
// MARK: BaseDataTransaction
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -88,7 +100,7 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
|
|||||||
- parameter into: the `Into` clause indicating the destination `NSManagedObject` or `CoreStoreObject` entity type and the destination configuration
|
- parameter into: the `Into` clause indicating the destination `NSManagedObject` or `CoreStoreObject` entity type and the destination configuration
|
||||||
- returns: a new `NSManagedObject` or `CoreStoreObject` instance of the specified entity type.
|
- returns: a new `NSManagedObject` or `CoreStoreObject` instance of the specified entity type.
|
||||||
*/
|
*/
|
||||||
public override func create<T: DynamicObject>(_ into: Into<T>) -> T {
|
public override func create<D>(_ into: Into<D>) -> D {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
!self.isCommitted,
|
!self.isCommitted,
|
||||||
@@ -99,12 +111,12 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns an editable proxy of a specified `NSManagedObject`. This method should not be used after the `commit()` method was already called once.
|
Returns an editable proxy of a specified `NSManagedObject` or `CoreStoreObject`.
|
||||||
|
|
||||||
- parameter object: the `NSManagedObject` type to be edited
|
- parameter object: the `NSManagedObject` or `CoreStoreObject` to be edited
|
||||||
- returns: an editable proxy for the specified `NSManagedObject`.
|
- returns: an editable proxy for the specified `NSManagedObject` or `CoreStoreObject`.
|
||||||
*/
|
*/
|
||||||
public override func edit<T: DynamicObject>(_ object: T?) -> T? {
|
public override func edit<D: DynamicObject>(_ object: D?) -> D? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
!self.isCommitted,
|
!self.isCommitted,
|
||||||
@@ -115,13 +127,13 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns an editable proxy of the object with the specified `NSManagedObjectID`. This method should not be used after the `commit()` method was already called once.
|
Returns an editable proxy of the object with the specified `NSManagedObjectID`.
|
||||||
|
|
||||||
- parameter into: an `Into` clause specifying the entity type
|
- parameter into: an `Into` clause specifying the entity type
|
||||||
- parameter objectID: the `NSManagedObjectID` for the object to be edited
|
- parameter objectID: the `NSManagedObjectID` for the object to be edited
|
||||||
- returns: an editable proxy for the specified `NSManagedObject`.
|
- returns: an editable proxy for the specified `NSManagedObject` or `CoreStoreObject`.
|
||||||
*/
|
*/
|
||||||
public override func edit<T: DynamicObject>(_ into: Into<T>, _ objectID: NSManagedObjectID) -> T? {
|
public override func edit<D>(_ into: Into<D>, _ objectID: NSManagedObjectID) -> D? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
!self.isCommitted,
|
!self.isCommitted,
|
||||||
@@ -132,11 +144,11 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Deletes a specified `NSManagedObject`. This method should not be used after the `commit()` method was already called once.
|
Deletes a specified `NSManagedObject` or `CoreStoreObject`.
|
||||||
|
|
||||||
- parameter object: the `NSManagedObject` type to be deleted
|
- parameter object: the `NSManagedObject` or `CoreStoreObject` to be deleted
|
||||||
*/
|
*/
|
||||||
public override func delete<T: DynamicObject>(_ object: T?) {
|
public override func delete<D: DynamicObject>(_ object: D?) {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
!self.isCommitted,
|
!self.isCommitted,
|
||||||
@@ -147,28 +159,28 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Deletes the specified `NSManagedObject`s.
|
Deletes the specified `DynamicObject`s.
|
||||||
|
|
||||||
- parameter object1: the `NSManagedObject` type to be deleted
|
- parameter object1: the `DynamicObject` to be deleted
|
||||||
- parameter object2: another `NSManagedObject` type to be deleted
|
- parameter object2: another `DynamicObject` to be deleted
|
||||||
- parameter objects: other `NSManagedObject`s type to be deleted
|
- parameter objects: other `DynamicObject`s to be deleted
|
||||||
*/
|
*/
|
||||||
public override func delete<T: DynamicObject>(_ object1: T?, _ object2: T?, _ objects: T?...) {
|
public override func delete<D: DynamicObject>(_ object1: D?, _ object2: D?, _ objects: D?...) {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
!self.isCommitted,
|
!self.isCommitted,
|
||||||
"Attempted to delete an entities from an already committed \(cs_typeName(self))."
|
"Attempted to delete an entities from an already committed \(cs_typeName(self))."
|
||||||
)
|
)
|
||||||
|
|
||||||
super.delete(([object1, object2] + objects).flatMap { $0 })
|
super.delete(([object1, object2] + objects).compactMap { $0 })
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Deletes the specified `NSManagedObject`s.
|
Deletes the specified `DynamicObject`s.
|
||||||
|
|
||||||
- parameter objects: the `NSManagedObject`s type to be deleted
|
- parameter objects: the `DynamicObject`s to be deleted
|
||||||
*/
|
*/
|
||||||
public override func delete<S: Sequence>(_ objects: S) where S.Iterator.Element: NSManagedObject {
|
public override func delete<S: Sequence>(_ objects: S) where S.Iterator.Element: DynamicObject {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
!self.isCommitted,
|
!self.isCommitted,
|
||||||
@@ -191,23 +203,19 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
|
|||||||
self.isCommitted = true
|
self.isCommitted = true
|
||||||
let group = DispatchGroup()
|
let group = DispatchGroup()
|
||||||
group.enter()
|
group.enter()
|
||||||
self.context.saveAsynchronouslyWithCompletion { (result) -> Void in
|
self.context.saveAsynchronouslyWithCompletion { (hasChanges, error) -> Void in
|
||||||
|
|
||||||
completion(result.0, result.1)
|
completion(hasChanges, error)
|
||||||
self.result = result
|
self.result = (hasChanges, error)
|
||||||
group.leave()
|
group.leave()
|
||||||
}
|
}
|
||||||
group.wait()
|
group.wait()
|
||||||
|
self.context.reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// MARK: Deprecated
|
// MARK: Deprecated
|
||||||
|
|
||||||
/**
|
|
||||||
Saves the transaction changes. This method should not be used after the `commit()` method was already called once.
|
|
||||||
|
|
||||||
- parameter completion: the block executed after the save completes. Success or failure is reported by the `SaveResult` argument of the block.
|
|
||||||
*/
|
|
||||||
@available(*, deprecated, message: "Use the new auto-commiting methods `DataStack.perform(asynchronous:completion:)` or `DataStack.perform(asynchronous:success:failure:)`. Please read the documentation on the behavior of the new methods.")
|
@available(*, deprecated, message: "Use the new auto-commiting methods `DataStack.perform(asynchronous:completion:)` or `DataStack.perform(asynchronous:success:failure:)`. Please read the documentation on the behavior of the new methods.")
|
||||||
public func commit(_ completion: @escaping (_ result: SaveResult) -> Void = { _ in }) {
|
public func commit(_ completion: @escaping (_ result: SaveResult) -> Void = { _ in }) {
|
||||||
|
|
||||||
@@ -219,22 +227,19 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
|
|||||||
!self.isCommitted,
|
!self.isCommitted,
|
||||||
"Attempted to commit a \(cs_typeName(self)) more than once."
|
"Attempted to commit a \(cs_typeName(self)) more than once."
|
||||||
)
|
)
|
||||||
self.autoCommit { (result) in
|
self.autoCommit { (hasChanges, error) in
|
||||||
|
|
||||||
switch result {
|
if let error = error {
|
||||||
|
|
||||||
case (let hasChanges, nil): completion(SaveResult(hasChanges: hasChanges))
|
completion(SaveResult(error))
|
||||||
case (_, let error?): completion(SaveResult(error))
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
completion(SaveResult(hasChanges: hasChanges))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Begins a child transaction synchronously where NSManagedObject creates, updates, and deletes can be made. This method should not be used after the `commit()` method was already called once.
|
|
||||||
|
|
||||||
- parameter closure: the block where creates, updates, and deletes can be made to the transaction. Transaction blocks are executed serially in a background queue, and all changes are made from a concurrent `NSManagedObjectContext`.
|
|
||||||
- returns: a `SaveResult` value indicating success or failure, or `nil` if the transaction was not comitted synchronously
|
|
||||||
*/
|
|
||||||
@available(*, deprecated, message: "Secondary tasks spawned from AsynchronousDataTransactions and SynchronousDataTransactions are no longer supported. ")
|
@available(*, deprecated, message: "Secondary tasks spawned from AsynchronousDataTransactions and SynchronousDataTransactions are no longer supported. ")
|
||||||
@discardableResult
|
@discardableResult
|
||||||
public func beginSynchronous(_ closure: @escaping (_ transaction: SynchronousDataTransaction) -> Void) -> SaveResult? {
|
public func beginSynchronous(_ closure: @escaping (_ transaction: SynchronousDataTransaction) -> Void) -> SaveResult? {
|
||||||
@@ -265,9 +270,9 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
|
|||||||
}
|
}
|
||||||
switch childTransaction.result {
|
switch childTransaction.result {
|
||||||
|
|
||||||
case nil: return nil
|
case .none: return nil
|
||||||
case (let hasChanges, nil)?: return SaveResult(hasChanges: hasChanges)
|
case .some(let hasChanges, nil): return SaveResult(hasChanges: hasChanges)
|
||||||
case (_, let error?)?: return SaveResult(error)
|
case .some(_, let error?): return SaveResult(error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
47
Sources/AttributeProtocol.swift
Normal file
47
Sources/AttributeProtocol.swift
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
//
|
||||||
|
// AttributeProtocol.swift
|
||||||
|
// CoreStore
|
||||||
|
//
|
||||||
|
// Copyright © 2018 John Rommel Estropia
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in all
|
||||||
|
// copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import CoreData
|
||||||
|
|
||||||
|
|
||||||
|
// MARK: - AttributeProtocol
|
||||||
|
|
||||||
|
internal protocol AttributeProtocol: class {
|
||||||
|
|
||||||
|
static var attributeType: NSAttributeType { get }
|
||||||
|
|
||||||
|
var keyPath: KeyPathString { get }
|
||||||
|
var isOptional: Bool { get }
|
||||||
|
var isTransient: Bool { get }
|
||||||
|
var allowsExternalBinaryDataStorage: Bool { get }
|
||||||
|
var versionHashModifier: () -> String? { get }
|
||||||
|
var renamingIdentifier: () -> String? { get }
|
||||||
|
var defaultValue: () -> Any? { get }
|
||||||
|
var affectedByKeyPaths: () -> Set<String> { get }
|
||||||
|
var rawObject: CoreStoreManagedObject? { get set }
|
||||||
|
var getter: CoreStoreManagedObject.CustomGetter? { get }
|
||||||
|
var setter: CoreStoreManagedObject.CustomSetter? { get }
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
// BaseDataTransaction+Importing.swift
|
// BaseDataTransaction+Importing.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2015 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -39,9 +39,9 @@ public extension BaseDataTransaction {
|
|||||||
- throws: an `Error` thrown from any of the `ImportableObject` methods
|
- throws: an `Error` thrown from any of the `ImportableObject` methods
|
||||||
- returns: the created `ImportableObject` instance, or `nil` if the import was ignored
|
- returns: the created `ImportableObject` instance, or `nil` if the import was ignored
|
||||||
*/
|
*/
|
||||||
public func importObject<T: DynamicObject & ImportableObject>(
|
public func importObject<D: ImportableObject>(
|
||||||
_ into: Into<T>,
|
_ into: Into<D>,
|
||||||
source: T.ImportSource) throws -> T? {
|
source: D.ImportSource) throws -> D? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
@@ -69,9 +69,9 @@ public extension BaseDataTransaction {
|
|||||||
- parameter source: the object to import values from
|
- parameter source: the object to import values from
|
||||||
- throws: an `Error` thrown from any of the `ImportableObject` methods
|
- throws: an `Error` thrown from any of the `ImportableObject` methods
|
||||||
*/
|
*/
|
||||||
public func importObject<T: DynamicObject & ImportableObject>(
|
public func importObject<D: ImportableObject>(
|
||||||
_ object: T,
|
_ object: D,
|
||||||
source: T.ImportSource) throws {
|
source: D.ImportSource) throws {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
@@ -80,7 +80,7 @@ public extension BaseDataTransaction {
|
|||||||
|
|
||||||
try autoreleasepool {
|
try autoreleasepool {
|
||||||
|
|
||||||
let entityType = type(of: object)
|
let entityType = cs_dynamicType(of: object)
|
||||||
guard entityType.shouldInsert(from: source, in: self) else {
|
guard entityType.shouldInsert(from: source, in: self) else {
|
||||||
|
|
||||||
return
|
return
|
||||||
@@ -97,9 +97,9 @@ public extension BaseDataTransaction {
|
|||||||
- throws: an `Error` thrown from any of the `ImportableObject` methods
|
- throws: an `Error` thrown from any of the `ImportableObject` methods
|
||||||
- returns: the array of created `ImportableObject` instances
|
- returns: the array of created `ImportableObject` instances
|
||||||
*/
|
*/
|
||||||
public func importObjects<T: DynamicObject & ImportableObject, S: Sequence>(
|
public func importObjects<D: ImportableObject, S: Sequence>(
|
||||||
_ into: Into<T>,
|
_ into: Into<D>,
|
||||||
sourceArray: S) throws -> [T] where S.Iterator.Element == T.ImportSource {
|
sourceArray: S) throws -> [D] where S.Iterator.Element == D.ImportSource {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
@@ -108,7 +108,7 @@ public extension BaseDataTransaction {
|
|||||||
|
|
||||||
return try autoreleasepool {
|
return try autoreleasepool {
|
||||||
|
|
||||||
return try sourceArray.flatMap { (source) -> T? in
|
return try sourceArray.compactMap { (source) -> D? in
|
||||||
|
|
||||||
let entityType = into.entityClass
|
let entityType = into.entityClass
|
||||||
guard entityType.shouldInsert(from: source, in: self) else {
|
guard entityType.shouldInsert(from: source, in: self) else {
|
||||||
@@ -133,9 +133,9 @@ public extension BaseDataTransaction {
|
|||||||
- throws: an `Error` thrown from any of the `ImportableUniqueObject` methods
|
- throws: an `Error` thrown from any of the `ImportableUniqueObject` methods
|
||||||
- returns: the created/updated `ImportableUniqueObject` instance, or `nil` if the import was ignored
|
- returns: the created/updated `ImportableUniqueObject` instance, or `nil` if the import was ignored
|
||||||
*/
|
*/
|
||||||
public func importUniqueObject<T: DynamicObject & ImportableUniqueObject>(
|
public func importUniqueObject<D: ImportableUniqueObject>(
|
||||||
_ into: Into<T>,
|
_ into: Into<D>,
|
||||||
source: T.ImportSource) throws -> T? {
|
source: D.ImportSource) throws -> D? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
@@ -151,7 +151,7 @@ public extension BaseDataTransaction {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if let object = self.fetchOne(From(entityType), Where(uniqueIDKeyPath, isEqualTo: uniqueIDValue)) {
|
if let object = try self.fetchOne(From(entityType), Where<D>(uniqueIDKeyPath, isEqualTo: uniqueIDValue)) {
|
||||||
|
|
||||||
guard entityType.shouldUpdate(from: source, in: self) else {
|
guard entityType.shouldUpdate(from: source, in: self) else {
|
||||||
|
|
||||||
@@ -177,7 +177,7 @@ public extension BaseDataTransaction {
|
|||||||
/**
|
/**
|
||||||
Updates existing `ImportableUniqueObject`s or creates them by importing from the specified array of import sources.
|
Updates existing `ImportableUniqueObject`s or creates them by importing from the specified array of import sources.
|
||||||
`ImportableUniqueObject` methods are called on the objects in the same order as they are in the `sourceArray`, and are returned in an array with that same order.
|
`ImportableUniqueObject` methods are called on the objects in the same order as they are in the `sourceArray`, and are returned in an array with that same order.
|
||||||
- Warning: If `sourceArray` contains multiple import sources with same ID, no merging will occur and ONLY THE LAST duplicate will be imported.
|
- Warning: If `sourceArray` contains multiple import sources with same ID, only the last `ImportSource` of the duplicates will be imported.
|
||||||
|
|
||||||
- parameter into: an `Into` clause specifying the entity type
|
- parameter into: an `Into` clause specifying the entity type
|
||||||
- parameter sourceArray: the array of objects to import values from
|
- parameter sourceArray: the array of objects to import values from
|
||||||
@@ -185,10 +185,10 @@ public extension BaseDataTransaction {
|
|||||||
- throws: an `Error` thrown from any of the `ImportableUniqueObject` methods
|
- throws: an `Error` thrown from any of the `ImportableUniqueObject` methods
|
||||||
- returns: the array of created/updated `ImportableUniqueObject` instances
|
- returns: the array of created/updated `ImportableUniqueObject` instances
|
||||||
*/
|
*/
|
||||||
public func importUniqueObjects<T: DynamicObject & ImportableUniqueObject, S: Sequence>(
|
public func importUniqueObjects<D: ImportableUniqueObject, S: Sequence>(
|
||||||
_ into: Into<T>,
|
_ into: Into<D>,
|
||||||
sourceArray: S,
|
sourceArray: S,
|
||||||
preProcess: @escaping (_ mapping: [T.UniqueIDType: T.ImportSource]) throws -> [T.UniqueIDType: T.ImportSource] = { $0 }) throws -> [T] where S.Iterator.Element == T.ImportSource {
|
preProcess: @escaping (_ mapping: [D.UniqueIDType: D.ImportSource]) throws -> [D.UniqueIDType: D.ImportSource] = { $0 }) throws -> [D] where S.Iterator.Element == D.ImportSource {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
@@ -198,10 +198,10 @@ public extension BaseDataTransaction {
|
|||||||
return try autoreleasepool {
|
return try autoreleasepool {
|
||||||
|
|
||||||
let entityType = into.entityClass
|
let entityType = into.entityClass
|
||||||
var importSourceByID = Dictionary<T.UniqueIDType, T.ImportSource>()
|
var importSourceByID = Dictionary<D.UniqueIDType, D.ImportSource>()
|
||||||
let sortedIDs = try autoreleasepool {
|
let sortedIDs = try autoreleasepool {
|
||||||
|
|
||||||
return try sourceArray.flatMap { (source) -> T.UniqueIDType? in
|
return try sourceArray.compactMap { (source) -> D.UniqueIDType? in
|
||||||
|
|
||||||
guard let uniqueIDValue = try entityType.uniqueID(from: source, in: self) else {
|
guard let uniqueIDValue = try entityType.uniqueID(from: source, in: self) else {
|
||||||
|
|
||||||
@@ -214,12 +214,13 @@ public extension BaseDataTransaction {
|
|||||||
|
|
||||||
importSourceByID = try autoreleasepool { try preProcess(importSourceByID) }
|
importSourceByID = try autoreleasepool { try preProcess(importSourceByID) }
|
||||||
|
|
||||||
var existingObjectsByID = Dictionary<T.UniqueIDType, T>()
|
var existingObjectsByID = Dictionary<D.UniqueIDType, D>()
|
||||||
self.fetchAll(From(entityType), Where(entityType.uniqueIDKeyPath, isMemberOf: sortedIDs))?
|
try self
|
||||||
|
.fetchAll(From(entityType), Where<D>(entityType.uniqueIDKeyPath, isMemberOf: sortedIDs))
|
||||||
.forEach { existingObjectsByID[$0.uniqueIDValue] = $0 }
|
.forEach { existingObjectsByID[$0.uniqueIDValue] = $0 }
|
||||||
|
|
||||||
var processedObjectIDs = Set<T.UniqueIDType>()
|
var processedObjectIDs = Set<D.UniqueIDType>()
|
||||||
var result = [T]()
|
var result = [D]()
|
||||||
|
|
||||||
for objectID in sortedIDs where !processedObjectIDs.contains(objectID) {
|
for objectID in sortedIDs where !processedObjectIDs.contains(objectID) {
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// BaseDataTransaction+Querying.swift
|
// BaseDataTransaction+Querying.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2015 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -32,246 +32,383 @@ import CoreData
|
|||||||
extension BaseDataTransaction: FetchableSource, QueryableSource {
|
extension BaseDataTransaction: FetchableSource, QueryableSource {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Deletes all `NSManagedObject`s that satisfy the specified `DeleteClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
Deletes all `DynamicObject`s that satisfy the specified `DeleteClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
|
||||||
- parameter from: a `From` clause indicating the entity type
|
- parameter from: a `From` clause indicating the entity type
|
||||||
- parameter deleteClauses: a series of `DeleteClause` instances for the delete request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
- parameter deleteClauses: a series of `DeleteClause` instances for the delete request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
- returns: the number of `NSManagedObject`s deleted
|
- returns: the number of `DynamicObject`s deleted
|
||||||
*/
|
*/
|
||||||
@discardableResult
|
@discardableResult
|
||||||
public func deleteAll<T: DynamicObject>(_ from: From<T>, _ deleteClauses: DeleteClause...) -> Int? {
|
public func deleteAll<D>(_ from: From<D>, _ deleteClauses: DeleteClause...) throws -> Int {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to delete from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to delete from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
|
return try self.context.deleteAll(from, deleteClauses)
|
||||||
return self.context.deleteAll(from, deleteClauses)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Deletes all `NSManagedObject`s that satisfy the specified `DeleteClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
Deletes all `DynamicObject`s that satisfy the specified `DeleteClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
|
||||||
- parameter from: a `From` clause indicating the entity type
|
- parameter from: a `From` clause indicating the entity type
|
||||||
- parameter deleteClauses: a series of `DeleteClause` instances for the delete request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
- parameter deleteClauses: a series of `DeleteClause` instances for the delete request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
- returns: the number of `NSManagedObject`s deleted
|
- returns: the number of `DynamicObject`s deleted
|
||||||
*/
|
*/
|
||||||
@discardableResult
|
@discardableResult
|
||||||
public func deleteAll<T: DynamicObject>(_ from: From<T>, _ deleteClauses: [DeleteClause]) -> Int? {
|
public func deleteAll<D>(_ from: From<D>, _ deleteClauses: [DeleteClause]) throws -> Int {
|
||||||
|
|
||||||
|
CoreStore.assert(
|
||||||
|
self.isRunningInAllowedQueue(),
|
||||||
|
"Attempted to delete from a \(cs_typeName(self)) outside its designated queue."
|
||||||
|
)
|
||||||
|
return try self.context.deleteAll(from, deleteClauses)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Deletes all `DynamicObject`s that satisfy the specified conditions.
|
||||||
|
```
|
||||||
|
transaction.deleteAll(From<Person>().where(\.age > 50))
|
||||||
|
```
|
||||||
|
- parameter clauseChain: a `FetchChainableBuilderType` clause chain created from a `From` clause
|
||||||
|
- returns: the number of `DynamicObject`s deleted
|
||||||
|
*/
|
||||||
|
@discardableResult
|
||||||
|
public func deleteAll<B: FetchChainableBuilderType>(_ clauseChain: B) throws -> Int {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to delete from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to delete from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
|
|
||||||
return self.context.deleteAll(from, deleteClauses)
|
return try self.context.deleteAll(clauseChain.from, clauseChain.fetchClauses)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// MARK: FetchableSource
|
// MARK: FetchableSource
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Fetches the `NSManagedObject` instance in the transaction's context from a reference created from a transaction or from a different managed object context.
|
Fetches the `DynamicObject` instance in the transaction's context from a reference created from a transaction or from a different managed object context.
|
||||||
|
|
||||||
- parameter object: a reference to the object created/fetched outside the transaction
|
- parameter object: a reference to the object created/fetched outside the transaction
|
||||||
- returns: the `NSManagedObject` instance if the object exists in the transaction, or `nil` if not found.
|
- returns: the `DynamicObject` instance if the object exists in the transaction, or `nil` if not found.
|
||||||
*/
|
*/
|
||||||
public func fetchExisting<T: DynamicObject>(_ object: T) -> T? {
|
public func fetchExisting<D: DynamicObject>(_ object: D) -> D? {
|
||||||
|
|
||||||
return self.context.fetchExisting(object)
|
return self.context.fetchExisting(object)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Fetches the `NSManagedObject` instance in the transaction's context from an `NSManagedObjectID`.
|
Fetches the `DynamicObject` instance in the transaction's context from an `NSManagedObjectID`.
|
||||||
|
|
||||||
- parameter objectID: the `NSManagedObjectID` for the object
|
- parameter objectID: the `NSManagedObjectID` for the object
|
||||||
- returns: the `NSManagedObject` instance if the object exists in the transaction, or `nil` if not found.
|
- returns: the `DynamicObject` instance if the object exists in the transaction, or `nil` if not found.
|
||||||
*/
|
*/
|
||||||
public func fetchExisting<T: DynamicObject>(_ objectID: NSManagedObjectID) -> T? {
|
public func fetchExisting<D: DynamicObject>(_ objectID: NSManagedObjectID) -> D? {
|
||||||
|
|
||||||
return self.context.fetchExisting(objectID)
|
return self.context.fetchExisting(objectID)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Fetches the `NSManagedObject` instances in the transaction's context from references created from a transaction or from a different managed object context.
|
Fetches the `DynamicObject` instances in the transaction's context from references created from a transaction or from a different managed object context.
|
||||||
|
|
||||||
- parameter objects: an array of `NSManagedObject`s created/fetched outside the transaction
|
- parameter objects: an array of `DynamicObject`s created/fetched outside the transaction
|
||||||
- returns: the `NSManagedObject` array for objects that exists in the transaction
|
- returns: the `DynamicObject` array for objects that exists in the transaction
|
||||||
*/
|
*/
|
||||||
public func fetchExisting<T: DynamicObject, S: Sequence>(_ objects: S) -> [T] where S.Iterator.Element == T {
|
public func fetchExisting<D: DynamicObject, S: Sequence>(_ objects: S) -> [D] where S.Iterator.Element == D {
|
||||||
|
|
||||||
return self.context.fetchExisting(objects)
|
return self.context.fetchExisting(objects)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Fetches the `NSManagedObject` instances in the transaction's context from a list of `NSManagedObjectID`.
|
Fetches the `DynamicObject` instances in the transaction's context from a list of `NSManagedObjectID`.
|
||||||
|
|
||||||
- parameter objectIDs: the `NSManagedObjectID` array for the objects
|
- parameter objectIDs: the `NSManagedObjectID` array for the objects
|
||||||
- returns: the `NSManagedObject` array for objects that exists in the transaction
|
- returns: the `DynamicObject` array for objects that exists in the transaction
|
||||||
*/
|
*/
|
||||||
public func fetchExisting<T: DynamicObject, S: Sequence>(_ objectIDs: S) -> [T] where S.Iterator.Element == NSManagedObjectID {
|
public func fetchExisting<D: DynamicObject, S: Sequence>(_ objectIDs: S) -> [D] where S.Iterator.Element == NSManagedObjectID {
|
||||||
|
|
||||||
return self.context.fetchExisting(objectIDs)
|
return self.context.fetchExisting(objectIDs)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Fetches the first `NSManagedObject` instance that satisfies the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
Fetches the first `DynamicObject` instance that satisfies the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
|
||||||
- parameter from: a `From` clause indicating the entity type
|
- parameter from: a `From` clause indicating the entity type
|
||||||
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
- returns: the first `NSManagedObject` instance that satisfies the specified `FetchClause`s
|
- returns: the first `DynamicObject` instance that satisfies the specified `FetchClause`s, or `nil` if no match was found
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
*/
|
*/
|
||||||
public func fetchOne<T: DynamicObject>(_ from: From<T>, _ fetchClauses: FetchClause...) -> T? {
|
public func fetchOne<D>(_ from: From<D>, _ fetchClauses: FetchClause...) throws -> D? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.context.fetchOne(from, fetchClauses)
|
return try self.context.fetchOne(from, fetchClauses)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Fetches the first `NSManagedObject` instance that satisfies the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
Fetches the first `DynamicObject` instance that satisfies the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
|
||||||
- parameter from: a `From` clause indicating the entity type
|
- parameter from: a `From` clause indicating the entity type
|
||||||
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
- returns: the first `NSManagedObject` instance that satisfies the specified `FetchClause`s
|
- returns: the first `DynamicObject` instance that satisfies the specified `FetchClause`s, or `nil` if no match was found
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
*/
|
*/
|
||||||
public func fetchOne<T: DynamicObject>(_ from: From<T>, _ fetchClauses: [FetchClause]) -> T? {
|
public func fetchOne<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> D? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.context.fetchOne(from, fetchClauses)
|
return try self.context.fetchOne(from, fetchClauses)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Fetches all `NSManagedObject` instances that satisfy the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
Fetches the first `DynamicObject` instance that satisfies the specified `FetchChainableBuilderType` built from a chain of clauses.
|
||||||
|
```
|
||||||
- parameter from: a `From` clause indicating the entity type
|
let youngestTeen = transaction.fetchOne(
|
||||||
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
From<MyPersonEntity>()
|
||||||
- returns: all `NSManagedObject` instances that satisfy the specified `FetchClause`s
|
.where(\.age > 18)
|
||||||
|
.orderBy(.ascending(\.age))
|
||||||
|
)
|
||||||
|
```
|
||||||
|
- parameter clauseChain: a `FetchChainableBuilderType` built from a chain of clauses
|
||||||
|
- returns: the first `DynamicObject` instance that satisfies the specified `FetchChainableBuilderType`, or `nil` if no match was found
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
*/
|
*/
|
||||||
public func fetchAll<T: DynamicObject>(_ from: From<T>, _ fetchClauses: FetchClause...) -> [T]? {
|
public func fetchOne<B: FetchChainableBuilderType>(_ clauseChain: B) throws -> B.ObjectType? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.context.fetchAll(from, fetchClauses)
|
return try self.context.fetchOne(clauseChain)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Fetches all `NSManagedObject` instances that satisfy the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
Fetches all `DynamicObject` instances that satisfy the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
|
||||||
- parameter from: a `From` clause indicating the entity type
|
- parameter from: a `From` clause indicating the entity type
|
||||||
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
- returns: all `NSManagedObject` instances that satisfy the specified `FetchClause`s
|
- returns: all `DynamicObject` instances that satisfy the specified `FetchClause`s, or an empty array if no match was found
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
*/
|
*/
|
||||||
public func fetchAll<T: DynamicObject>(_ from: From<T>, _ fetchClauses: [FetchClause]) -> [T]? {
|
public func fetchAll<D>(_ from: From<D>, _ fetchClauses: FetchClause...) throws -> [D] {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.context.fetchAll(from, fetchClauses)
|
return try self.context.fetchAll(from, fetchClauses)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Fetches the number of `NSManagedObject`s that satisfy the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
Fetches all `DynamicObject` instances that satisfy the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
|
||||||
- parameter from: a `From` clause indicating the entity type
|
- parameter from: a `From` clause indicating the entity type
|
||||||
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
- returns: the number `NSManagedObject`s that satisfy the specified `FetchClause`s
|
- returns: all `DynamicObject` instances that satisfy the specified `FetchClause`s, or an empty array if no match was found
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
*/
|
*/
|
||||||
public func fetchCount<T: DynamicObject>(_ from: From<T>, _ fetchClauses: FetchClause...) -> Int? {
|
public func fetchAll<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> [D] {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.context.fetchCount(from, fetchClauses)
|
return try self.context.fetchAll(from, fetchClauses)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Fetches the number of `NSManagedObject`s that satisfy the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
Fetches all `DynamicObject` instances that satisfy the specified `FetchChainableBuilderType` built from a chain of clauses.
|
||||||
|
```
|
||||||
- parameter from: a `From` clause indicating the entity type
|
let people = transaction.fetchAll(
|
||||||
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
From<MyPersonEntity>()
|
||||||
- returns: the number `NSManagedObject`s that satisfy the specified `FetchClause`s
|
.where(\.age > 18)
|
||||||
|
.orderBy(.ascending(\.age))
|
||||||
|
)
|
||||||
|
```
|
||||||
|
- parameter clauseChain: a `FetchChainableBuilderType` built from a chain of clauses
|
||||||
|
- returns: all `DynamicObject` instances that satisfy the specified `FetchChainableBuilderType`, or an empty array if no match was found
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
*/
|
*/
|
||||||
public func fetchCount<T: DynamicObject>(_ from: From<T>, _ fetchClauses: [FetchClause]) -> Int? {
|
public func fetchAll<B: FetchChainableBuilderType>(_ clauseChain: B) throws -> [B.ObjectType] {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.context.fetchCount(from, fetchClauses)
|
return try self.context.fetchAll(clauseChain)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Fetches the `NSManagedObjectID` for the first `NSManagedObject` that satisfies the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
Fetches the number of `DynamicObject`s that satisfy the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
|
||||||
- parameter from: a `From` clause indicating the entity type
|
- parameter from: a `From` clause indicating the entity type
|
||||||
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
- returns: the `NSManagedObjectID` for the first `NSManagedObject` that satisfies the specified `FetchClause`s
|
- returns: the number of `DynamicObject`s that satisfy the specified `FetchClause`s
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
*/
|
*/
|
||||||
public func fetchObjectID<T: DynamicObject>(_ from: From<T>, _ fetchClauses: FetchClause...) -> NSManagedObjectID? {
|
public func fetchCount<D>(_ from: From<D>, _ fetchClauses: FetchClause...) throws -> Int {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.context.fetchObjectID(from, fetchClauses)
|
return try self.context.fetchCount(from, fetchClauses)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Fetches the `NSManagedObjectID` for the first `NSManagedObject` that satisfies the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
Fetches the number of `DynamicObject`s that satisfy the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
|
||||||
- parameter from: a `From` clause indicating the entity type
|
- parameter from: a `From` clause indicating the entity type
|
||||||
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
- returns: the `NSManagedObjectID` for the first `NSManagedObject` that satisfies the specified `FetchClause`s
|
- returns: the number of `DynamicObject`s that satisfy the specified `FetchClause`s
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
*/
|
*/
|
||||||
public func fetchObjectID<T: DynamicObject>(_ from: From<T>, _ fetchClauses: [FetchClause]) -> NSManagedObjectID? {
|
public func fetchCount<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> Int {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.context.fetchObjectID(from, fetchClauses)
|
return try self.context.fetchCount(from, fetchClauses)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Fetches the `NSManagedObjectID` for all `NSManagedObject`s that satisfy the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
Fetches the number of `DynamicObject`s that satisfy the specified `FetchChainableBuilderType` built from a chain of clauses.
|
||||||
|
```
|
||||||
- parameter from: a `From` clause indicating the entity type
|
let numberOfAdults = transaction.fetchCount(
|
||||||
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
From<MyPersonEntity>()
|
||||||
- returns: the `NSManagedObjectID` for all `NSManagedObject`s that satisfy the specified `FetchClause`s
|
.where(\.age > 18)
|
||||||
|
.orderBy(.ascending(\.age))
|
||||||
|
)
|
||||||
|
```
|
||||||
|
- parameter clauseChain: a `FetchChainableBuilderType` built from a chain of clauses
|
||||||
|
- returns: the number of `DynamicObject`s that satisfy the specified `FetchChainableBuilderType`
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
*/
|
*/
|
||||||
public func fetchObjectIDs<T: DynamicObject>(_ from: From<T>, _ fetchClauses: FetchClause...) -> [NSManagedObjectID]? {
|
public func fetchCount<B: FetchChainableBuilderType>(_ clauseChain: B) throws -> Int {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.context.fetchObjectIDs(from, fetchClauses)
|
return try self.context.fetchCount(clauseChain)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Fetches the `NSManagedObjectID` for all `NSManagedObject`s that satisfy the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
Fetches the `NSManagedObjectID` for the first `DynamicObject` that satisfies the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
|
||||||
- parameter from: a `From` clause indicating the entity type
|
- parameter from: a `From` clause indicating the entity type
|
||||||
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
- returns: the `NSManagedObjectID` for all `NSManagedObject`s that satisfy the specified `FetchClause`s
|
- returns: the `NSManagedObjectID` for the first `DynamicObject` that satisfies the specified `FetchClause`s, or `nil` if no match was found
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
*/
|
*/
|
||||||
public func fetchObjectIDs<T: DynamicObject>(_ from: From<T>, _ fetchClauses: [FetchClause]) -> [NSManagedObjectID]? {
|
public func fetchObjectID<D>(_ from: From<D>, _ fetchClauses: FetchClause...) throws -> NSManagedObjectID? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.context.fetchObjectIDs(from, fetchClauses)
|
return try self.context.fetchObjectID(from, fetchClauses)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fetches the `NSManagedObjectID` for the first `DynamicObject` that satisfies the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
|
||||||
|
- parameter from: a `From` clause indicating the entity type
|
||||||
|
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
- returns: the `NSManagedObjectID` for the first `DynamicObject` that satisfies the specified `FetchClause`s, or `nil` if no match was found
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
|
*/
|
||||||
|
public func fetchObjectID<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> NSManagedObjectID? {
|
||||||
|
|
||||||
|
CoreStore.assert(
|
||||||
|
self.isRunningInAllowedQueue(),
|
||||||
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
|
)
|
||||||
|
return try self.context.fetchObjectID(from, fetchClauses)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fetches the `NSManagedObjectID` for the first `DynamicObject` that satisfies the specified `FetchChainableBuilderType` built from a chain of clauses.
|
||||||
|
```
|
||||||
|
let youngestTeenID = transaction.fetchObjectID(
|
||||||
|
From<MyPersonEntity>()
|
||||||
|
.where(\.age > 18)
|
||||||
|
.orderBy(.ascending(\.age))
|
||||||
|
)
|
||||||
|
```
|
||||||
|
- parameter clauseChain: a `FetchChainableBuilderType` built from a chain of clauses
|
||||||
|
- returns: the `NSManagedObjectID` for the first `DynamicObject` that satisfies the specified `FetchChainableBuilderType`, or `nil` if no match was found
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
|
*/
|
||||||
|
public func fetchObjectID<B: FetchChainableBuilderType>(_ clauseChain: B) throws -> NSManagedObjectID? {
|
||||||
|
|
||||||
|
CoreStore.assert(
|
||||||
|
self.isRunningInAllowedQueue(),
|
||||||
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
|
)
|
||||||
|
return try self.context.fetchObjectID(clauseChain)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fetches the `NSManagedObjectID` for all `DynamicObject`s that satisfy the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
|
||||||
|
- parameter from: a `From` clause indicating the entity type
|
||||||
|
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
- returns: the `NSManagedObjectID` for all `DynamicObject`s that satisfy the specified `FetchClause`s, or an empty array if no match was found
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
|
*/
|
||||||
|
public func fetchObjectIDs<D>(_ from: From<D>, _ fetchClauses: FetchClause...) throws -> [NSManagedObjectID] {
|
||||||
|
|
||||||
|
CoreStore.assert(
|
||||||
|
self.isRunningInAllowedQueue(),
|
||||||
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
|
)
|
||||||
|
return try self.context.fetchObjectIDs(from, fetchClauses)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fetches the `NSManagedObjectID` for all `DynamicObject`s that satisfy the specified `FetchClause`s. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
|
||||||
|
- parameter from: a `From` clause indicating the entity type
|
||||||
|
- parameter fetchClauses: a series of `FetchClause` instances for the fetch request. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
- returns: the `NSManagedObjectID` for all `DynamicObject`s that satisfy the specified `FetchClause`s, or an empty array if no match was found
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
|
*/
|
||||||
|
public func fetchObjectIDs<D>(_ from: From<D>, _ fetchClauses: [FetchClause]) throws -> [NSManagedObjectID] {
|
||||||
|
|
||||||
|
CoreStore.assert(
|
||||||
|
self.isRunningInAllowedQueue(),
|
||||||
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
|
)
|
||||||
|
return try self.context.fetchObjectIDs(from, fetchClauses)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fetches the `NSManagedObjectID` for all `DynamicObject`s that satisfy the specified `FetchChainableBuilderType` built from a chain of clauses.
|
||||||
|
```
|
||||||
|
let idsOfAdults = transaction.fetchObjectIDs(
|
||||||
|
From<MyPersonEntity>()
|
||||||
|
.where(\.age > 18)
|
||||||
|
.orderBy(.ascending(\.age))
|
||||||
|
)
|
||||||
|
```
|
||||||
|
- parameter clauseChain: a `FetchChainableBuilderType` built from a chain of clauses
|
||||||
|
- returns: the `NSManagedObjectID` for all `DynamicObject`s that satisfy the specified `FetchChainableBuilderType`, or an empty array if no match was found
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
|
*/
|
||||||
|
public func fetchObjectIDs<B: FetchChainableBuilderType>(_ clauseChain: B) throws -> [NSManagedObjectID] {
|
||||||
|
|
||||||
|
CoreStore.assert(
|
||||||
|
self.isRunningInAllowedQueue(),
|
||||||
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
|
)
|
||||||
|
return try self.context.fetchObjectIDs(clauseChain)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -285,15 +422,16 @@ extension BaseDataTransaction: FetchableSource, QueryableSource {
|
|||||||
- parameter from: a `From` clause indicating the entity type
|
- parameter from: a `From` clause indicating the entity type
|
||||||
- parameter selectClause: a `Select<U>` clause indicating the properties to fetch, and with the generic type indicating the return type.
|
- parameter selectClause: a `Select<U>` clause indicating the properties to fetch, and with the generic type indicating the return type.
|
||||||
- parameter queryClauses: a series of `QueryClause` instances for the query request. Accepts `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
- parameter queryClauses: a series of `QueryClause` instances for the query request. Accepts `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
||||||
- returns: the result of the the query. The type of the return value is specified by the generic type of the `Select<U>` parameter.
|
- returns: the result of the the query, or `nil` if no match was found. The type of the return value is specified by the generic type of the `Select<U>` parameter.
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
*/
|
*/
|
||||||
public func queryValue<T: DynamicObject, U: QueryableAttributeType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: QueryClause...) -> U? {
|
public func queryValue<D, U: QueryableAttributeType>(_ from: From<D>, _ selectClause: Select<D, U>, _ queryClauses: QueryClause...) throws -> U? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to query from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to query from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.context.queryValue(from, selectClause, queryClauses)
|
return try self.context.queryValue(from, selectClause, queryClauses)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -304,15 +442,40 @@ extension BaseDataTransaction: FetchableSource, QueryableSource {
|
|||||||
- parameter from: a `From` clause indicating the entity type
|
- parameter from: a `From` clause indicating the entity type
|
||||||
- parameter selectClause: a `Select<U>` clause indicating the properties to fetch, and with the generic type indicating the return type.
|
- parameter selectClause: a `Select<U>` clause indicating the properties to fetch, and with the generic type indicating the return type.
|
||||||
- parameter queryClauses: a series of `QueryClause` instances for the query request. Accepts `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
- parameter queryClauses: a series of `QueryClause` instances for the query request. Accepts `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
||||||
- returns: the result of the the query. The type of the return value is specified by the generic type of the `Select<U>` parameter.
|
- returns: the result of the the query, or `nil` if no match was found. The type of the return value is specified by the generic type of the `Select<U>` parameter.
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
*/
|
*/
|
||||||
public func queryValue<T: DynamicObject, U: QueryableAttributeType>(_ from: From<T>, _ selectClause: Select<U>, _ queryClauses: [QueryClause]) -> U? {
|
public func queryValue<D, U: QueryableAttributeType>(_ from: From<D>, _ selectClause: Select<D, U>, _ queryClauses: [QueryClause]) throws -> U? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to query from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to query from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.context.queryValue(from, selectClause, queryClauses)
|
return try self.context.queryValue(from, selectClause, queryClauses)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Queries a property value or aggregate as specified by the `QueryChainableBuilderType` built from a chain of clauses.
|
||||||
|
|
||||||
|
A "query" differs from a "fetch" in that it only retrieves values already stored in the persistent store. As such, values from unsaved transactions or contexts will not be incorporated in the query result.
|
||||||
|
```
|
||||||
|
let averageAdultAge = transaction.queryValue(
|
||||||
|
From<MyPersonEntity>()
|
||||||
|
.select(Int.self, .average(\.age))
|
||||||
|
.where(\.age > 18)
|
||||||
|
)
|
||||||
|
```
|
||||||
|
- parameter clauseChain: a `QueryChainableBuilderType` indicating the property/aggregate to fetch and the series of queries for the request.
|
||||||
|
- returns: the result of the the query as specified by the `QueryChainableBuilderType`, or `nil` if no match was found.
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
|
*/
|
||||||
|
public func queryValue<B: QueryChainableBuilderType>(_ clauseChain: B) throws -> B.ResultType? where B.ResultType: QueryableAttributeType {
|
||||||
|
|
||||||
|
CoreStore.assert(
|
||||||
|
self.isRunningInAllowedQueue(),
|
||||||
|
"Attempted to query from a \(cs_typeName(self)) outside its designated queue."
|
||||||
|
)
|
||||||
|
return try self.context.queryValue(clauseChain.from, clauseChain.select, clauseChain.queryClauses)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -324,14 +487,15 @@ extension BaseDataTransaction: FetchableSource, QueryableSource {
|
|||||||
- parameter selectClause: a `Select<U>` clause indicating the properties to fetch, and with the generic type indicating the return type.
|
- parameter selectClause: a `Select<U>` clause indicating the properties to fetch, and with the generic type indicating the return type.
|
||||||
- parameter queryClauses: a series of `QueryClause` instances for the query request. Accepts `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
- parameter queryClauses: a series of `QueryClause` instances for the query request. Accepts `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
||||||
- returns: the result of the the query. The type of the return value is specified by the generic type of the `Select<U>` parameter.
|
- returns: the result of the the query. The type of the return value is specified by the generic type of the `Select<U>` parameter.
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
*/
|
*/
|
||||||
public func queryAttributes<T: DynamicObject>(_ from: From<T>, _ selectClause: Select<NSDictionary>, _ queryClauses: QueryClause...) -> [[String: Any]]? {
|
public func queryAttributes<D>(_ from: From<D>, _ selectClause: Select<D, NSDictionary>, _ queryClauses: QueryClause...) throws -> [[String: Any]] {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to query from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to query from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.context.queryAttributes(from, selectClause, queryClauses)
|
return try self.context.queryAttributes(from, selectClause, queryClauses)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -343,14 +507,48 @@ extension BaseDataTransaction: FetchableSource, QueryableSource {
|
|||||||
- parameter selectClause: a `Select<U>` clause indicating the properties to fetch, and with the generic type indicating the return type.
|
- parameter selectClause: a `Select<U>` clause indicating the properties to fetch, and with the generic type indicating the return type.
|
||||||
- parameter queryClauses: a series of `QueryClause` instances for the query request. Accepts `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
- parameter queryClauses: a series of `QueryClause` instances for the query request. Accepts `Where`, `OrderBy`, `GroupBy`, and `Tweak` clauses.
|
||||||
- returns: the result of the the query. The type of the return value is specified by the generic type of the `Select<U>` parameter.
|
- returns: the result of the the query. The type of the return value is specified by the generic type of the `Select<U>` parameter.
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
*/
|
*/
|
||||||
public func queryAttributes<T: DynamicObject>(_ from: From<T>, _ selectClause: Select<NSDictionary>, _ queryClauses: [QueryClause]) -> [[String: Any]]? {
|
public func queryAttributes<D>(_ from: From<D>, _ selectClause: Select<D, NSDictionary>, _ queryClauses: [QueryClause]) throws -> [[String: Any]] {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to query from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to query from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.context.queryAttributes(from, selectClause, queryClauses)
|
return try self.context.queryAttributes(from, selectClause, queryClauses)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Queries a dictionary of attribute values or as specified by the `QueryChainableBuilderType` built from a chain of clauses.
|
||||||
|
|
||||||
|
A "query" differs from a "fetch" in that it only retrieves values already stored in the persistent store. As such, values from unsaved transactions or contexts will not be incorporated in the query result.
|
||||||
|
```
|
||||||
|
let results = dataStack.queryAttributes(
|
||||||
|
From<MyPersonEntity>()
|
||||||
|
.select(
|
||||||
|
NSDictionary.self,
|
||||||
|
.attribute(\.age, as: "age"),
|
||||||
|
.count(\.age, as: "numberOfPeople")
|
||||||
|
)
|
||||||
|
.groupBy(\.age)
|
||||||
|
)
|
||||||
|
for dictionary in results! {
|
||||||
|
let age = dictionary["age"] as! Int
|
||||||
|
let count = dictionary["numberOfPeople"] as! Int
|
||||||
|
print("There are \(count) people who are \(age) years old."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- parameter clauseChain: a `QueryChainableBuilderType` indicating the properties to fetch and the series of queries for the request.
|
||||||
|
- returns: the result of the the query as specified by the `QueryChainableBuilderType`
|
||||||
|
- throws: a `CoreStoreError` value indicating the failure if the specified entity could not be found in any store's schema.
|
||||||
|
*/
|
||||||
|
public func queryAttributes<B: QueryChainableBuilderType>(_ clauseChain: B) throws -> [[String: Any]] where B.ResultType == NSDictionary {
|
||||||
|
|
||||||
|
CoreStore.assert(
|
||||||
|
self.isRunningInAllowedQueue(),
|
||||||
|
"Attempted to query from a \(cs_typeName(self)) outside its designated queue."
|
||||||
|
)
|
||||||
|
return try self.context.queryAttributes(clauseChain.from, clauseChain.select, clauseChain.queryClauses)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -365,11 +563,11 @@ extension BaseDataTransaction: FetchableSource, QueryableSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// MARK: Deprecated
|
// MARK: Obsoleted
|
||||||
|
|
||||||
@available(*, deprecated, renamed: "unsafeContext()")
|
@available(*, obsoleted: 3.1, renamed: "unsafeContext()")
|
||||||
public func internalContext() -> NSManagedObjectContext {
|
public func internalContext() -> NSManagedObjectContext {
|
||||||
|
|
||||||
return self.unsafeContext()
|
fatalError()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// BaseDataTransaction.swift
|
// BaseDataTransaction.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2014 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -50,7 +50,7 @@ public /*abstract*/ class BaseDataTransaction {
|
|||||||
- parameter into: the `Into` clause indicating the destination `NSManagedObject` or `CoreStoreObject` entity type and the destination configuration
|
- parameter into: the `Into` clause indicating the destination `NSManagedObject` or `CoreStoreObject` entity type and the destination configuration
|
||||||
- returns: a new `NSManagedObject` or `CoreStoreObject` instance of the specified entity type.
|
- returns: a new `NSManagedObject` or `CoreStoreObject` instance of the specified entity type.
|
||||||
*/
|
*/
|
||||||
public func create<T: DynamicObject>(_ into: Into<T>) -> T {
|
public func create<D>(_ into: Into<D>) -> D {
|
||||||
|
|
||||||
let entityClass = into.entityClass
|
let entityClass = into.entityClass
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
@@ -116,12 +116,12 @@ public /*abstract*/ class BaseDataTransaction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns an editable proxy of a specified `NSManagedObject`.
|
Returns an editable proxy of a specified `NSManagedObject` or `CoreStoreObject`.
|
||||||
|
|
||||||
- parameter object: the `NSManagedObject` type to be edited
|
- parameter object: the `NSManagedObject` or `CoreStoreObject` type to be edited
|
||||||
- returns: an editable proxy for the specified `NSManagedObject`.
|
- returns: an editable proxy for the specified `NSManagedObject` or `CoreStoreObject`.
|
||||||
*/
|
*/
|
||||||
public func edit<T: DynamicObject>(_ object: T?) -> T? {
|
public func edit<D: DynamicObject>(_ object: D?) -> D? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
@@ -139,9 +139,9 @@ public /*abstract*/ class BaseDataTransaction {
|
|||||||
|
|
||||||
- parameter into: an `Into` clause specifying the entity type
|
- parameter into: an `Into` clause specifying the entity type
|
||||||
- parameter objectID: the `NSManagedObjectID` for the object to be edited
|
- parameter objectID: the `NSManagedObjectID` for the object to be edited
|
||||||
- returns: an editable proxy for the specified `NSManagedObject`.
|
- returns: an editable proxy for the specified `NSManagedObject` or `CoreStoreObject`.
|
||||||
*/
|
*/
|
||||||
public func edit<T: DynamicObject>(_ into: Into<T>, _ objectID: NSManagedObjectID) -> T? {
|
public func edit<D>(_ into: Into<D>, _ objectID: NSManagedObjectID) -> D? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
@@ -156,11 +156,11 @@ public /*abstract*/ class BaseDataTransaction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Deletes a specified `NSManagedObject`.
|
Deletes a specified `NSManagedObject` or `CoreStoreObject`.
|
||||||
|
|
||||||
- parameter object: the `NSManagedObject` to be deleted
|
- parameter object: the `NSManagedObject` or `CoreStoreObject` to be deleted
|
||||||
*/
|
*/
|
||||||
public func delete<T: DynamicObject>(_ object: T?) {
|
public func delete<D: DynamicObject>(_ object: D?) {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.isRunningInAllowedQueue(),
|
self.isRunningInAllowedQueue(),
|
||||||
@@ -173,21 +173,21 @@ public /*abstract*/ class BaseDataTransaction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Deletes the specified `NSManagedObject`s.
|
Deletes the specified `NSManagedObject`s or `CoreStoreObject`s.
|
||||||
|
|
||||||
- parameter object1: the `NSManagedObject` to be deleted
|
- parameter object1: the `NSManagedObject` or `CoreStoreObject` to be deleted
|
||||||
- parameter object2: another `NSManagedObject` to be deleted
|
- parameter object2: another `NSManagedObject` or `CoreStoreObject` to be deleted
|
||||||
- parameter objects: other `NSManagedObject`s to be deleted
|
- parameter objects: other `NSManagedObject`s or `CoreStoreObject`s to be deleted
|
||||||
*/
|
*/
|
||||||
public func delete<T: DynamicObject>(_ object1: T?, _ object2: T?, _ objects: T?...) {
|
public func delete<D: DynamicObject>(_ object1: D?, _ object2: D?, _ objects: D?...) {
|
||||||
|
|
||||||
self.delete(([object1, object2] + objects).flatMap { $0 })
|
self.delete(([object1, object2] + objects).compactMap { $0 })
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Deletes the specified `NSManagedObject`s.
|
Deletes the specified `NSManagedObject`s or `CoreStoreObject`s.
|
||||||
|
|
||||||
- parameter objects: the `NSManagedObject`s to be deleted
|
- parameter objects: the `NSManagedObject`s or `CoreStoreObject`s to be deleted
|
||||||
*/
|
*/
|
||||||
public func delete<S: Sequence>(_ objects: S) where S.Iterator.Element: DynamicObject {
|
public func delete<S: Sequence>(_ objects: S) where S.Iterator.Element: DynamicObject {
|
||||||
|
|
||||||
@@ -215,40 +215,22 @@ public /*abstract*/ class BaseDataTransaction {
|
|||||||
// MARK: Inspecting Pending Objects
|
// MARK: Inspecting Pending Objects
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns all pending `NSManagedObject`s that were inserted to the transaction. This method should not be called after the `commit()` method was called.
|
Returns all pending `DynamicObject`s of the specified type that were inserted to the transaction. This method should not be called after the `commit()` method was called.
|
||||||
|
|
||||||
- returns: a `Set` of pending `NSManagedObject`s that were inserted to the transaction.
|
|
||||||
*/
|
|
||||||
public func insertedObjects() -> Set<NSManagedObject> {
|
|
||||||
|
|
||||||
CoreStore.assert(
|
|
||||||
self.transactionQueue.cs_isCurrentExecutionContext(),
|
|
||||||
"Attempted to access inserted objects from a \(cs_typeName(self)) outside its designated queue."
|
|
||||||
)
|
|
||||||
CoreStore.assert(
|
|
||||||
!self.isCommitted,
|
|
||||||
"Attempted to access inserted objects from an already committed \(cs_typeName(self))."
|
|
||||||
)
|
|
||||||
return self.context.insertedObjects
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Returns all pending `NSManagedObject`s of the specified type that were inserted to the transaction. This method should not be called after the `commit()` method was called.
|
|
||||||
|
|
||||||
- parameter entity: the `NSManagedObject` subclass to filter
|
- parameter entity: the `DynamicObject` subclass to filter
|
||||||
- returns: a `Set` of pending `NSManagedObject`s of the specified type that were inserted to the transaction.
|
- returns: a `Set` of pending `DynamicObject`s of the specified type that were inserted to the transaction.
|
||||||
*/
|
*/
|
||||||
public func insertedObjects<T: NSManagedObject>(_ entity: T.Type) -> Set<T> {
|
public func insertedObjects<D: DynamicObject>(_ entity: D.Type) -> Set<D> {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.transactionQueue.cs_isCurrentExecutionContext(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to access inserted objects from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to access inserted objects from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
!self.isCommitted,
|
!self.isCommitted,
|
||||||
"Attempted to access inserted objects from an already committed \(cs_typeName(self))."
|
"Attempted to access inserted objects from an already committed \(cs_typeName(self))."
|
||||||
)
|
)
|
||||||
return Set(self.context.insertedObjects.flatMap { $0 as? T })
|
return Set(self.context.insertedObjects.compactMap({ entity.cs_matches(object: $0) ? entity.cs_fromRaw(object: $0) : nil }))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -259,7 +241,7 @@ public /*abstract*/ class BaseDataTransaction {
|
|||||||
public func insertedObjectIDs() -> Set<NSManagedObjectID> {
|
public func insertedObjectIDs() -> Set<NSManagedObjectID> {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.transactionQueue.cs_isCurrentExecutionContext(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to access inserted object IDs from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to access inserted object IDs from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
@@ -272,57 +254,39 @@ public /*abstract*/ class BaseDataTransaction {
|
|||||||
/**
|
/**
|
||||||
Returns all pending `NSManagedObjectID`s of the specified type that were inserted to the transaction. This method should not be called after the `commit()` method was called.
|
Returns all pending `NSManagedObjectID`s of the specified type that were inserted to the transaction. This method should not be called after the `commit()` method was called.
|
||||||
|
|
||||||
- parameter entity: the `NSManagedObject` subclass to filter
|
- parameter entity: the `DynamicObject` subclass to filter
|
||||||
- returns: a `Set` of pending `NSManagedObjectID`s of the specified type that were inserted to the transaction.
|
- returns: a `Set` of pending `NSManagedObjectID`s of the specified type that were inserted to the transaction.
|
||||||
*/
|
*/
|
||||||
public func insertedObjectIDs<T: NSManagedObject>(_ entity: T.Type) -> Set<NSManagedObjectID> {
|
public func insertedObjectIDs<D: DynamicObject>(_ entity: D.Type) -> Set<NSManagedObjectID> {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.transactionQueue.cs_isCurrentExecutionContext(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to access inserted object IDs from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to access inserted object IDs from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
!self.isCommitted,
|
!self.isCommitted,
|
||||||
"Attempted to access inserted objects IDs from an already committed \(cs_typeName(self))."
|
"Attempted to access inserted objects IDs from an already committed \(cs_typeName(self))."
|
||||||
)
|
)
|
||||||
return Set(self.context.insertedObjects.filter { $0.isKind(of: entity) }.map { $0.objectID })
|
return Set(self.context.insertedObjects.compactMap({ entity.cs_matches(object: $0) ? $0.objectID : nil }))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns all pending `NSManagedObject`s that were updated in the transaction. This method should not be called after the `commit()` method was called.
|
Returns all pending `DynamicObject`s of the specified type that were updated in the transaction. This method should not be called after the `commit()` method was called.
|
||||||
|
|
||||||
- returns: a `Set` of pending `NSManagedObject`s that were updated to the transaction.
|
- parameter entity: the `DynamicObject` subclass to filter
|
||||||
|
- returns: a `Set` of pending `DynamicObject`s of the specified type that were updated in the transaction.
|
||||||
*/
|
*/
|
||||||
public func updatedObjects() -> Set<NSManagedObject> {
|
public func updatedObjects<D: DynamicObject>(_ entity: D.Type) -> Set<D> {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.transactionQueue.cs_isCurrentExecutionContext(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to access updated objects from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to access updated objects from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
!self.isCommitted,
|
!self.isCommitted,
|
||||||
"Attempted to access updated objects from an already committed \(cs_typeName(self))."
|
"Attempted to access updated objects from an already committed \(cs_typeName(self))."
|
||||||
)
|
)
|
||||||
return self.context.updatedObjects
|
return Set(self.context.updatedObjects.compactMap({ entity.cs_matches(object: $0) ? entity.cs_fromRaw(object: $0) : nil }))
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Returns all pending `NSManagedObject`s of the specified type that were updated in the transaction. This method should not be called after the `commit()` method was called.
|
|
||||||
|
|
||||||
- parameter entity: the `NSManagedObject` subclass to filter
|
|
||||||
- returns: a `Set` of pending `NSManagedObject`s of the specified type that were updated in the transaction.
|
|
||||||
*/
|
|
||||||
public func updatedObjects<T: NSManagedObject>(_ entity: T.Type) -> Set<T> {
|
|
||||||
|
|
||||||
CoreStore.assert(
|
|
||||||
self.transactionQueue.cs_isCurrentExecutionContext(),
|
|
||||||
"Attempted to access updated objects from a \(cs_typeName(self)) outside its designated queue."
|
|
||||||
)
|
|
||||||
CoreStore.assert(
|
|
||||||
!self.isCommitted,
|
|
||||||
"Attempted to access updated objects from an already committed \(cs_typeName(self))."
|
|
||||||
)
|
|
||||||
return Set(self.context.updatedObjects.filter { $0.isKind(of: entity) }.map { $0 as! T })
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -333,7 +297,7 @@ public /*abstract*/ class BaseDataTransaction {
|
|||||||
public func updatedObjectIDs() -> Set<NSManagedObjectID> {
|
public func updatedObjectIDs() -> Set<NSManagedObjectID> {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.transactionQueue.cs_isCurrentExecutionContext(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to access updated object IDs from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to access updated object IDs from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
@@ -346,69 +310,51 @@ public /*abstract*/ class BaseDataTransaction {
|
|||||||
/**
|
/**
|
||||||
Returns all pending `NSManagedObjectID`s of the specified type that were updated in the transaction. This method should not be called after the `commit()` method was called.
|
Returns all pending `NSManagedObjectID`s of the specified type that were updated in the transaction. This method should not be called after the `commit()` method was called.
|
||||||
|
|
||||||
- parameter entity: the `NSManagedObject` subclass to filter
|
- parameter entity: the `DynamicObject` subclass to filter
|
||||||
- returns: a `Set` of pending `NSManagedObjectID`s of the specified type that were updated in the transaction.
|
- returns: a `Set` of pending `NSManagedObjectID`s of the specified type that were updated in the transaction.
|
||||||
*/
|
*/
|
||||||
public func updatedObjectIDs<T: NSManagedObject>(_ entity: T.Type) -> Set<NSManagedObjectID> {
|
public func updatedObjectIDs<D: DynamicObject>(_ entity: D.Type) -> Set<NSManagedObjectID> {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.transactionQueue.cs_isCurrentExecutionContext(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to access updated object IDs from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to access updated object IDs from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
!self.isCommitted,
|
!self.isCommitted,
|
||||||
"Attempted to access updated object IDs from an already committed \(cs_typeName(self))."
|
"Attempted to access updated object IDs from an already committed \(cs_typeName(self))."
|
||||||
)
|
)
|
||||||
return Set(self.context.updatedObjects.filter { $0.isKind(of: entity) }.map { $0.objectID })
|
return Set(self.context.updatedObjects.compactMap({ entity.cs_matches(object: $0) ? $0.objectID : nil }))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns all pending `NSManagedObject`s that were deleted from the transaction. This method should not be called after the `commit()` method was called.
|
Returns all pending `DynamicObject`s of the specified type that were deleted from the transaction. This method should not be called after the `commit()` method was called.
|
||||||
|
|
||||||
- returns: a `Set` of pending `NSManagedObject`s that were deleted from the transaction.
|
- parameter entity: the `DynamicObject` subclass to filter
|
||||||
|
- returns: a `Set` of pending `DynamicObject`s of the specified type that were deleted from the transaction.
|
||||||
*/
|
*/
|
||||||
public func deletedObjects() -> Set<NSManagedObject> {
|
public func deletedObjects<D: DynamicObject>(_ entity: D.Type) -> Set<D> {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.transactionQueue.cs_isCurrentExecutionContext(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to access deleted objects from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to access deleted objects from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
!self.isCommitted,
|
!self.isCommitted,
|
||||||
"Attempted to access deleted objects from an already committed \(cs_typeName(self))."
|
"Attempted to access deleted objects from an already committed \(cs_typeName(self))."
|
||||||
)
|
)
|
||||||
return self.context.deletedObjects
|
return Set(self.context.deletedObjects.compactMap({ entity.cs_matches(object: $0) ? entity.cs_fromRaw(object: $0) : nil }))
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Returns all pending `NSManagedObject`s of the specified type that were deleted from the transaction. This method should not be called after the `commit()` method was called.
|
|
||||||
|
|
||||||
- parameter entity: the `NSManagedObject` subclass to filter
|
|
||||||
- returns: a `Set` of pending `NSManagedObject`s of the specified type that were deleted from the transaction.
|
|
||||||
*/
|
|
||||||
public func deletedObjects<T: NSManagedObject>(_ entity: T.Type) -> Set<T> {
|
|
||||||
|
|
||||||
CoreStore.assert(
|
|
||||||
self.transactionQueue.cs_isCurrentExecutionContext(),
|
|
||||||
"Attempted to access deleted objects from a \(cs_typeName(self)) outside its designated queue."
|
|
||||||
)
|
|
||||||
CoreStore.assert(
|
|
||||||
!self.isCommitted,
|
|
||||||
"Attempted to access deleted objects from an already committed \(cs_typeName(self))."
|
|
||||||
)
|
|
||||||
return Set(self.context.deletedObjects.filter { $0.isKind(of: entity) }.map { $0 as! T })
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns all pending `NSManagedObjectID`s of the specified type that were deleted from the transaction. This method should not be called after the `commit()` method was called.
|
Returns all pending `NSManagedObjectID`s of the specified type that were deleted from the transaction. This method should not be called after the `commit()` method was called.
|
||||||
|
|
||||||
- parameter entity: the `NSManagedObject` subclass to filter
|
- parameter entity: the `DynamicObject` subclass to filter
|
||||||
- returns: a `Set` of pending `NSManagedObjectID`s of the specified type that were deleted from the transaction.
|
- returns: a `Set` of pending `NSManagedObjectID`s of the specified type that were deleted from the transaction.
|
||||||
*/
|
*/
|
||||||
public func deletedObjectIDs() -> Set<NSManagedObjectID> {
|
public func deletedObjectIDs() -> Set<NSManagedObjectID> {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.transactionQueue.cs_isCurrentExecutionContext(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to access deleted object IDs from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to access deleted object IDs from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
@@ -421,20 +367,20 @@ public /*abstract*/ class BaseDataTransaction {
|
|||||||
/**
|
/**
|
||||||
Returns all pending `NSManagedObjectID`s of the specified type that were deleted from the transaction. This method should not be called after the `commit()` method was called.
|
Returns all pending `NSManagedObjectID`s of the specified type that were deleted from the transaction. This method should not be called after the `commit()` method was called.
|
||||||
|
|
||||||
- parameter entity: the `NSManagedObject` subclass to filter
|
- parameter entity: the `DynamicObject` subclass to filter
|
||||||
- returns: a `Set` of pending `NSManagedObjectID`s of the specified type that were deleted from the transaction.
|
- returns: a `Set` of pending `NSManagedObjectID`s of the specified type that were deleted from the transaction.
|
||||||
*/
|
*/
|
||||||
public func deletedObjectIDs<T: NSManagedObject>(_ entity: T.Type) -> Set<NSManagedObjectID> {
|
public func deletedObjectIDs<D: DynamicObject>(_ entity: D.Type) -> Set<NSManagedObjectID> {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.transactionQueue.cs_isCurrentExecutionContext(),
|
self.isRunningInAllowedQueue(),
|
||||||
"Attempted to access deleted object IDs from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to access deleted object IDs from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
!self.isCommitted,
|
!self.isCommitted,
|
||||||
"Attempted to access deleted object IDs from an already committed \(cs_typeName(self))."
|
"Attempted to access deleted object IDs from an already committed \(cs_typeName(self))."
|
||||||
)
|
)
|
||||||
return Set(self.context.deletedObjects.filter { $0.isKind(of: entity) }.map { $0.objectID })
|
return Set(self.context.deletedObjects.compactMap({ entity.cs_matches(object: $0) ? $0.objectID : nil }))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -450,7 +396,7 @@ public /*abstract*/ class BaseDataTransaction {
|
|||||||
```
|
```
|
||||||
- Important: Do not use this method to store thread-sensitive data.
|
- Important: Do not use this method to store thread-sensitive data.
|
||||||
*/
|
*/
|
||||||
private let userInfo = UserInfo()
|
public let userInfo = UserInfo()
|
||||||
|
|
||||||
|
|
||||||
// MARK: Internal
|
// MARK: Internal
|
||||||
@@ -491,4 +437,54 @@ public /*abstract*/ class BaseDataTransaction {
|
|||||||
|
|
||||||
return self.bypassesQueueing || self.transactionQueue.cs_isCurrentExecutionContext()
|
return self.bypassesQueueing || self.transactionQueue.cs_isCurrentExecutionContext()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
|
||||||
|
self.context.reset()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// MARK: Deprecated
|
||||||
|
|
||||||
|
@available(*, deprecated, message: "Use insertedObjects(_:) and pass the specific entity type")
|
||||||
|
public func insertedObjects() -> Set<NSManagedObject> {
|
||||||
|
|
||||||
|
CoreStore.assert(
|
||||||
|
self.transactionQueue.cs_isCurrentExecutionContext(),
|
||||||
|
"Attempted to access inserted objects from a \(cs_typeName(self)) outside its designated queue."
|
||||||
|
)
|
||||||
|
CoreStore.assert(
|
||||||
|
!self.isCommitted,
|
||||||
|
"Attempted to access inserted objects from an already committed \(cs_typeName(self))."
|
||||||
|
)
|
||||||
|
return self.context.insertedObjects
|
||||||
|
}
|
||||||
|
|
||||||
|
@available(*, deprecated, message: "Use updatedObjects(_:) and pass the specific entity type")
|
||||||
|
public func updatedObjects() -> Set<NSManagedObject> {
|
||||||
|
|
||||||
|
CoreStore.assert(
|
||||||
|
self.transactionQueue.cs_isCurrentExecutionContext(),
|
||||||
|
"Attempted to access updated objects from a \(cs_typeName(self)) outside its designated queue."
|
||||||
|
)
|
||||||
|
CoreStore.assert(
|
||||||
|
!self.isCommitted,
|
||||||
|
"Attempted to access updated objects from an already committed \(cs_typeName(self))."
|
||||||
|
)
|
||||||
|
return self.context.updatedObjects
|
||||||
|
}
|
||||||
|
|
||||||
|
@available(*, deprecated, message: "Use deletedObjects(_:) and pass the specific entity type")
|
||||||
|
public func deletedObjects() -> Set<NSManagedObject> {
|
||||||
|
|
||||||
|
CoreStore.assert(
|
||||||
|
self.transactionQueue.cs_isCurrentExecutionContext(),
|
||||||
|
"Attempted to access deleted objects from a \(cs_typeName(self)) outside its designated queue."
|
||||||
|
)
|
||||||
|
CoreStore.assert(
|
||||||
|
!self.isCommitted,
|
||||||
|
"Attempted to access deleted objects from an already committed \(cs_typeName(self))."
|
||||||
|
)
|
||||||
|
return self.context.deletedObjects
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// CSAsynchronousDataTransaction.swift
|
// CSAsynchronousDataTransaction.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -35,12 +35,13 @@ import CoreData
|
|||||||
- SeeAlso: `AsynchronousDataTransaction`
|
- SeeAlso: `AsynchronousDataTransaction`
|
||||||
*/
|
*/
|
||||||
@objc
|
@objc
|
||||||
public final class CSAsynchronousDataTransaction: CSBaseDataTransaction {
|
public final class CSAsynchronousDataTransaction: CSBaseDataTransaction, CoreStoreObjectiveCType {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Saves the transaction changes. This method should not be used after the `-commitWithCompletion:` method was already called once.
|
Saves the transaction changes. This method should not be used after the `-commitWithCompletion:` method was already called once.
|
||||||
|
|
||||||
- parameter completion: the block executed after the save completes. Success or failure is reported by the `CSSaveResult` argument of the block.
|
- parameter success: the block executed if the save succeeds.
|
||||||
|
- parameter failure: the block executed if the save fails. A `CSError` is reported as the argument of the block.
|
||||||
*/
|
*/
|
||||||
@objc
|
@objc
|
||||||
public func commitWithSuccess(_ success: (() -> Void)?, failure: ((CSError) -> Void)?) {
|
public func commitWithSuccess(_ success: (() -> Void)?, failure: ((CSError) -> Void)?) {
|
||||||
@@ -53,12 +54,15 @@ public final class CSAsynchronousDataTransaction: CSBaseDataTransaction {
|
|||||||
!self.bridgeToSwift.isCommitted,
|
!self.bridgeToSwift.isCommitted,
|
||||||
"Attempted to commit a \(cs_typeName(self)) more than once."
|
"Attempted to commit a \(cs_typeName(self)) more than once."
|
||||||
)
|
)
|
||||||
self.bridgeToSwift.autoCommit { (result) in
|
self.bridgeToSwift.autoCommit { (_, error) in
|
||||||
|
|
||||||
switch result {
|
if let error = error {
|
||||||
|
|
||||||
case (_, nil): success?()
|
failure?(error.bridgeToObjectiveC)
|
||||||
case (_, let error?): failure?(error.bridgeToObjectiveC)
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
success?()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -138,9 +142,9 @@ public final class CSAsynchronousDataTransaction: CSBaseDataTransaction {
|
|||||||
|
|
||||||
public typealias SwiftType = AsynchronousDataTransaction
|
public typealias SwiftType = AsynchronousDataTransaction
|
||||||
|
|
||||||
public override var bridgeToSwift: AsynchronousDataTransaction {
|
public var bridgeToSwift: AsynchronousDataTransaction {
|
||||||
|
|
||||||
return super.bridgeToSwift as! AsynchronousDataTransaction
|
return super.swiftTransaction as! AsynchronousDataTransaction
|
||||||
}
|
}
|
||||||
|
|
||||||
public required init(_ swiftValue: AsynchronousDataTransaction) {
|
public required init(_ swiftValue: AsynchronousDataTransaction) {
|
||||||
@@ -148,19 +152,14 @@ public final class CSAsynchronousDataTransaction: CSBaseDataTransaction {
|
|||||||
super.init(swiftValue as BaseDataTransaction)
|
super.init(swiftValue as BaseDataTransaction)
|
||||||
}
|
}
|
||||||
|
|
||||||
public required init(_ swiftValue: BaseDataTransaction) {
|
public required override init(_ swiftValue: BaseDataTransaction) {
|
||||||
|
|
||||||
super.init(swiftValue as! AsynchronousDataTransaction)
|
super.init(swiftValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// MARK: Deprecated
|
// MARK: Deprecated
|
||||||
|
|
||||||
/**
|
|
||||||
Saves the transaction changes. This method should not be used after the `-commitWithCompletion:` method was already called once.
|
|
||||||
|
|
||||||
- parameter completion: the block executed after the save completes. Success or failure is reported by the `CSSaveResult` argument of the block.
|
|
||||||
*/
|
|
||||||
@available(*, deprecated, message: "Use the new -[CSAsynchronousDataTransaction commitWithSuccess:failure:] method.")
|
@available(*, deprecated, message: "Use the new -[CSAsynchronousDataTransaction commitWithSuccess:failure:] method.")
|
||||||
@objc
|
@objc
|
||||||
public func commitWithCompletion(_ completion: ((_ result: CSSaveResult) -> Void)?) {
|
public func commitWithCompletion(_ completion: ((_ result: CSSaveResult) -> Void)?) {
|
||||||
@@ -179,12 +178,6 @@ public final class CSAsynchronousDataTransaction: CSBaseDataTransaction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Begins a child transaction synchronously where `NSManagedObject` creates, updates, and deletes can be made. This method should not be used after the `-commitWithCompletion:` method was already called once.
|
|
||||||
|
|
||||||
- parameter closure: the block where creates, updates, and deletes can be made to the transaction. Transaction blocks are executed serially in a background queue, and all changes are made from a concurrent `NSManagedObjectContext`.
|
|
||||||
- returns: a `CSSaveResult` value indicating success or failure, or `nil` if the transaction was not comitted synchronously
|
|
||||||
*/
|
|
||||||
@available(*, deprecated, message: "Secondary tasks spawned from CSAsynchronousDataTransactions and CSSynchronousDataTransactions are no longer supported. ")
|
@available(*, deprecated, message: "Secondary tasks spawned from CSAsynchronousDataTransactions and CSSynchronousDataTransactions are no longer supported. ")
|
||||||
@objc
|
@objc
|
||||||
@discardableResult
|
@discardableResult
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// CSBaseDataTransaction+Querying.swift
|
// CSBaseDataTransaction+Querying.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -40,7 +40,7 @@ public extension CSBaseDataTransaction {
|
|||||||
@objc
|
@objc
|
||||||
public func fetchExistingObject(_ object: NSManagedObject) -> Any? {
|
public func fetchExistingObject(_ object: NSManagedObject) -> Any? {
|
||||||
|
|
||||||
return self.bridgeToSwift.context.fetchExisting(object) as NSManagedObject?
|
return self.swiftTransaction.context.fetchExisting(object) as NSManagedObject?
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -52,7 +52,7 @@ public extension CSBaseDataTransaction {
|
|||||||
@objc
|
@objc
|
||||||
public func fetchExistingObjectWithID(_ objectID: NSManagedObjectID) -> Any? {
|
public func fetchExistingObjectWithID(_ objectID: NSManagedObjectID) -> Any? {
|
||||||
|
|
||||||
return self.bridgeToSwift.context.fetchExisting(objectID) as NSManagedObject?
|
return self.swiftTransaction.context.fetchExisting(objectID) as NSManagedObject?
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -64,7 +64,7 @@ public extension CSBaseDataTransaction {
|
|||||||
@objc
|
@objc
|
||||||
public func fetchExistingObjects(_ objects: [NSManagedObject]) -> [Any] {
|
public func fetchExistingObjects(_ objects: [NSManagedObject]) -> [Any] {
|
||||||
|
|
||||||
return self.bridgeToSwift.context.fetchExisting(objects) as [NSManagedObject]
|
return self.swiftTransaction.context.fetchExisting(objects) as [NSManagedObject]
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -76,7 +76,7 @@ public extension CSBaseDataTransaction {
|
|||||||
@objc
|
@objc
|
||||||
public func fetchExistingObjectsWithIDs(_ objectIDs: [NSManagedObjectID]) -> [Any] {
|
public func fetchExistingObjectsWithIDs(_ objectIDs: [NSManagedObjectID]) -> [Any] {
|
||||||
|
|
||||||
return self.bridgeToSwift.context.fetchExisting(objectIDs) as [NSManagedObject]
|
return self.swiftTransaction.context.fetchExisting(objectIDs) as [NSManagedObject]
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -90,10 +90,11 @@ public extension CSBaseDataTransaction {
|
|||||||
public func fetchOneFrom(_ from: CSFrom, fetchClauses: [CSFetchClause]) -> Any? {
|
public func fetchOneFrom(_ from: CSFrom, fetchClauses: [CSFetchClause]) -> Any? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.bridgeToSwift.isRunningInAllowedQueue(),
|
self.swiftTransaction.isRunningInAllowedQueue(),
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.bridgeToSwift.context.fetchOne(from, fetchClauses)
|
return (try? self.swiftTransaction.context.fetchOne(from, fetchClauses))?
|
||||||
|
.flatMap({ $0 })
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -107,10 +108,11 @@ public extension CSBaseDataTransaction {
|
|||||||
public func fetchAllFrom(_ from: CSFrom, fetchClauses: [CSFetchClause]) -> [Any]? {
|
public func fetchAllFrom(_ from: CSFrom, fetchClauses: [CSFetchClause]) -> [Any]? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.bridgeToSwift.isRunningInAllowedQueue(),
|
self.swiftTransaction.isRunningInAllowedQueue(),
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.bridgeToSwift.context.fetchAll(from, fetchClauses)
|
return (try? self.swiftTransaction.context.fetchAll(from, fetchClauses))
|
||||||
|
.flatMap({ $0 })
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -124,12 +126,11 @@ public extension CSBaseDataTransaction {
|
|||||||
public func fetchCountFrom(_ from: CSFrom, fetchClauses: [CSFetchClause]) -> NSNumber? {
|
public func fetchCountFrom(_ from: CSFrom, fetchClauses: [CSFetchClause]) -> NSNumber? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.bridgeToSwift.isRunningInAllowedQueue(),
|
self.swiftTransaction.isRunningInAllowedQueue(),
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.bridgeToSwift.context
|
return (try? self.swiftTransaction.context.fetchCount(from, fetchClauses))
|
||||||
.fetchCount(from, fetchClauses)
|
.flatMap({ NSNumber(value: $0) })
|
||||||
.flatMap { NSNumber(value: $0) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -143,10 +144,11 @@ public extension CSBaseDataTransaction {
|
|||||||
public func fetchObjectIDFrom(_ from: CSFrom, fetchClauses: [CSFetchClause]) -> NSManagedObjectID? {
|
public func fetchObjectIDFrom(_ from: CSFrom, fetchClauses: [CSFetchClause]) -> NSManagedObjectID? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.bridgeToSwift.isRunningInAllowedQueue(),
|
self.swiftTransaction.isRunningInAllowedQueue(),
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to fetch from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.bridgeToSwift.context.fetchObjectID(from, fetchClauses)
|
return (try? self.swiftTransaction.context.fetchObjectID(from, fetchClauses))
|
||||||
|
.flatMap({ $0 })
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -163,10 +165,11 @@ public extension CSBaseDataTransaction {
|
|||||||
public func queryValueFrom(_ from: CSFrom, selectClause: CSSelect, queryClauses: [CSQueryClause]) -> Any? {
|
public func queryValueFrom(_ from: CSFrom, selectClause: CSSelect, queryClauses: [CSQueryClause]) -> Any? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.bridgeToSwift.isRunningInAllowedQueue(),
|
self.swiftTransaction.isRunningInAllowedQueue(),
|
||||||
"Attempted to query from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to query from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.bridgeToSwift.context.queryValue(from, selectClause, queryClauses)
|
return (try? self.swiftTransaction.context.queryValue(from, selectClause, queryClauses))
|
||||||
|
.flatMap({ $0 })
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -183,9 +186,10 @@ public extension CSBaseDataTransaction {
|
|||||||
public func queryAttributesFrom(_ from: CSFrom, selectClause: CSSelect, queryClauses: [CSQueryClause]) -> [[String: Any]]? {
|
public func queryAttributesFrom(_ from: CSFrom, selectClause: CSSelect, queryClauses: [CSQueryClause]) -> [[String: Any]]? {
|
||||||
|
|
||||||
CoreStore.assert(
|
CoreStore.assert(
|
||||||
self.bridgeToSwift.isRunningInAllowedQueue(),
|
self.swiftTransaction.isRunningInAllowedQueue(),
|
||||||
"Attempted to query from a \(cs_typeName(self)) outside its designated queue."
|
"Attempted to query from a \(cs_typeName(self)) outside its designated queue."
|
||||||
)
|
)
|
||||||
return self.bridgeToSwift.context.queryAttributes(from, selectClause, queryClauses)
|
return (try? self.swiftTransaction.context.queryAttributes(from, selectClause, queryClauses))
|
||||||
|
.flatMap({ $0 })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// CSBaseDataTransaction.swift
|
// CSBaseDataTransaction.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -35,7 +35,7 @@ import CoreData
|
|||||||
- SeeAlso: `BaseDataTransaction`
|
- SeeAlso: `BaseDataTransaction`
|
||||||
*/
|
*/
|
||||||
@objc
|
@objc
|
||||||
public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
public class CSBaseDataTransaction: NSObject {
|
||||||
|
|
||||||
// MARK: Object management
|
// MARK: Object management
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
|||||||
@objc
|
@objc
|
||||||
public var hasChanges: Bool {
|
public var hasChanges: Bool {
|
||||||
|
|
||||||
return self.bridgeToSwift.hasChanges
|
return self.swiftTransaction.hasChanges
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -57,7 +57,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
|||||||
@objc
|
@objc
|
||||||
public func createInto(_ into: CSInto) -> Any {
|
public func createInto(_ into: CSInto) -> Any {
|
||||||
|
|
||||||
return self.bridgeToSwift.create(into.bridgeToSwift)
|
return self.swiftTransaction.create(into.bridgeToSwift)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -69,7 +69,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
|||||||
@objc
|
@objc
|
||||||
public func editObject(_ object: NSManagedObject?) -> Any? {
|
public func editObject(_ object: NSManagedObject?) -> Any? {
|
||||||
|
|
||||||
return self.bridgeToSwift.edit(object)
|
return self.swiftTransaction.edit(object)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -82,7 +82,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
|||||||
@objc
|
@objc
|
||||||
public func editInto(_ into: CSInto, objectID: NSManagedObjectID) -> Any? {
|
public func editInto(_ into: CSInto, objectID: NSManagedObjectID) -> Any? {
|
||||||
|
|
||||||
return self.bridgeToSwift.edit(into.bridgeToSwift, objectID)
|
return self.swiftTransaction.edit(into.bridgeToSwift, objectID)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -93,7 +93,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
|||||||
@objc
|
@objc
|
||||||
public func deleteObject(_ object: NSManagedObject?) {
|
public func deleteObject(_ object: NSManagedObject?) {
|
||||||
|
|
||||||
self.bridgeToSwift.delete(object)
|
self.swiftTransaction.delete(object)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -104,7 +104,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
|||||||
@objc
|
@objc
|
||||||
public func deleteObjects(_ objects: [NSManagedObject]) {
|
public func deleteObjects(_ objects: [NSManagedObject]) {
|
||||||
|
|
||||||
self.bridgeToSwift.delete(objects)
|
self.swiftTransaction.delete(objects)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -113,23 +113,12 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
|||||||
@objc
|
@objc
|
||||||
public func refreshAndMergeAllObjects() {
|
public func refreshAndMergeAllObjects() {
|
||||||
|
|
||||||
self.bridgeToSwift.refreshAndMergeAllObjects()
|
self.swiftTransaction.refreshAndMergeAllObjects()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// MARK: Inspecting Pending Objects
|
// MARK: Inspecting Pending Objects
|
||||||
|
|
||||||
/**
|
|
||||||
Returns all pending `NSManagedObject`s that were inserted to the transaction. This method should not be called after the `-commit*:` method was called.
|
|
||||||
|
|
||||||
- returns: an `NSSet` of pending `NSManagedObject`s that were inserted to the transaction.
|
|
||||||
*/
|
|
||||||
@objc
|
|
||||||
public func insertedObjects() -> Set<NSManagedObject> {
|
|
||||||
|
|
||||||
return self.bridgeToSwift.insertedObjects()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns all pending `NSManagedObject`s of the specified type that were inserted to the transaction. This method should not be called after the `-commit*:` method was called.
|
Returns all pending `NSManagedObject`s of the specified type that were inserted to the transaction. This method should not be called after the `-commit*:` method was called.
|
||||||
|
|
||||||
@@ -139,7 +128,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
|||||||
@objc
|
@objc
|
||||||
public func insertedObjectsOfType(_ entity: NSManagedObject.Type) -> Set<NSManagedObject> {
|
public func insertedObjectsOfType(_ entity: NSManagedObject.Type) -> Set<NSManagedObject> {
|
||||||
|
|
||||||
return self.bridgeToSwift.insertedObjects(entity)
|
return self.swiftTransaction.insertedObjects(entity)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -150,7 +139,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
|||||||
@objc
|
@objc
|
||||||
public func insertedObjectIDs() -> Set<NSManagedObjectID> {
|
public func insertedObjectIDs() -> Set<NSManagedObjectID> {
|
||||||
|
|
||||||
return self.bridgeToSwift.insertedObjectIDs()
|
return self.swiftTransaction.insertedObjectIDs()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -162,18 +151,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
|||||||
@objc
|
@objc
|
||||||
public func insertedObjectIDsOfType(_ entity: NSManagedObject.Type) -> Set<NSManagedObjectID> {
|
public func insertedObjectIDsOfType(_ entity: NSManagedObject.Type) -> Set<NSManagedObjectID> {
|
||||||
|
|
||||||
return self.bridgeToSwift.insertedObjectIDs(entity)
|
return self.swiftTransaction.insertedObjectIDs(entity)
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Returns all pending `NSManagedObject`s that were updated in the transaction. This method should not be called after the `-commit*:` method was called.
|
|
||||||
|
|
||||||
- returns: an `NSSet` of pending `NSManagedObject`s that were updated to the transaction.
|
|
||||||
*/
|
|
||||||
@objc
|
|
||||||
public func updatedObjects() -> Set<NSManagedObject> {
|
|
||||||
|
|
||||||
return self.bridgeToSwift.updatedObjects()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -185,7 +163,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
|||||||
@objc
|
@objc
|
||||||
public func updatedObjectsOfType(_ entity: NSManagedObject.Type) -> Set<NSManagedObject> {
|
public func updatedObjectsOfType(_ entity: NSManagedObject.Type) -> Set<NSManagedObject> {
|
||||||
|
|
||||||
return self.bridgeToSwift.updatedObjects(entity)
|
return self.swiftTransaction.updatedObjects(entity)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -196,7 +174,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
|||||||
@objc
|
@objc
|
||||||
public func updatedObjectIDs() -> Set<NSManagedObjectID> {
|
public func updatedObjectIDs() -> Set<NSManagedObjectID> {
|
||||||
|
|
||||||
return self.bridgeToSwift.updatedObjectIDs()
|
return self.swiftTransaction.updatedObjectIDs()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -208,18 +186,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
|||||||
@objc
|
@objc
|
||||||
public func updatedObjectIDsOfType(_ entity: NSManagedObject.Type) -> Set<NSManagedObjectID> {
|
public func updatedObjectIDsOfType(_ entity: NSManagedObject.Type) -> Set<NSManagedObjectID> {
|
||||||
|
|
||||||
return self.bridgeToSwift.updatedObjectIDs(entity)
|
return self.swiftTransaction.updatedObjectIDs(entity)
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Returns all pending `NSManagedObject`s that were deleted from the transaction. This method should not be called after the `-commit*:` method was called.
|
|
||||||
|
|
||||||
- returns: an `NSSet` of pending `NSManagedObject`s that were deleted from the transaction.
|
|
||||||
*/
|
|
||||||
@objc
|
|
||||||
public func deletedObjects() -> Set<NSManagedObject> {
|
|
||||||
|
|
||||||
return self.bridgeToSwift.deletedObjects()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -231,19 +198,18 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
|||||||
@objc
|
@objc
|
||||||
public func deletedObjectsOfType(_ entity: NSManagedObject.Type) -> Set<NSManagedObject> {
|
public func deletedObjectsOfType(_ entity: NSManagedObject.Type) -> Set<NSManagedObject> {
|
||||||
|
|
||||||
return self.bridgeToSwift.deletedObjects(entity)
|
return self.swiftTransaction.deletedObjects(entity)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns all pending `NSManagedObjectID`s of the specified type that were deleted from the transaction. This method should not be called after the `-commit*:` method was called.
|
Returns all pending `NSManagedObjectID`s of the specified type that were deleted from the transaction. This method should not be called after the `-commit*:` method was called.
|
||||||
|
|
||||||
- parameter entity: the `NSManagedObject` subclass to filter
|
|
||||||
- returns: an `NSSet` of pending `NSManagedObjectID`s of the specified type that were deleted from the transaction.
|
- returns: an `NSSet` of pending `NSManagedObjectID`s of the specified type that were deleted from the transaction.
|
||||||
*/
|
*/
|
||||||
@objc
|
@objc
|
||||||
public func deletedObjectIDs() -> Set<NSManagedObjectID> {
|
public func deletedObjectIDs() -> Set<NSManagedObjectID> {
|
||||||
|
|
||||||
return self.bridgeToSwift.deletedObjectIDs()
|
return self.swiftTransaction.deletedObjectIDs()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -255,7 +221,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
|||||||
@objc
|
@objc
|
||||||
public func deletedObjectIDsOfType(_ entity: NSManagedObject.Type) -> Set<NSManagedObjectID> {
|
public func deletedObjectIDsOfType(_ entity: NSManagedObject.Type) -> Set<NSManagedObjectID> {
|
||||||
|
|
||||||
return self.bridgeToSwift.deletedObjectIDs(entity)
|
return self.swiftTransaction.deletedObjectIDs(entity)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -263,7 +229,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
|||||||
|
|
||||||
public override var hash: Int {
|
public override var hash: Int {
|
||||||
|
|
||||||
return ObjectIdentifier(self.bridgeToSwift).hashValue
|
return ObjectIdentifier(self.swiftTransaction).hashValue
|
||||||
}
|
}
|
||||||
|
|
||||||
public override func isEqual(_ object: Any?) -> Bool {
|
public override func isEqual(_ object: Any?) -> Bool {
|
||||||
@@ -272,25 +238,41 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType {
|
|||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return self.bridgeToSwift === object.bridgeToSwift
|
return self.swiftTransaction === object.swiftTransaction
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// MARK: CoreStoreObjectiveCType
|
// MARK: Internal
|
||||||
|
|
||||||
public required init(_ swiftValue: BaseDataTransaction) {
|
internal let swiftTransaction: BaseDataTransaction
|
||||||
|
|
||||||
|
internal init(_ swiftValue: BaseDataTransaction) {
|
||||||
|
|
||||||
self.swiftTransaction = swiftValue
|
self.swiftTransaction = swiftValue
|
||||||
super.init()
|
super.init()
|
||||||
}
|
}
|
||||||
|
|
||||||
public var bridgeToSwift: BaseDataTransaction {
|
|
||||||
|
// MARK: Deprecated
|
||||||
|
|
||||||
|
@available(*, deprecated, message: "Use -[insertedObjectsOfType:] and pass the specific entity class")
|
||||||
|
@objc
|
||||||
|
public func insertedObjects() -> Set<NSManagedObject> {
|
||||||
|
|
||||||
return self.swiftTransaction
|
return self.swiftTransaction.insertedObjects()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@available(*, deprecated, message: "Use -[updatedObjectsOfType:] and pass the specific entity class")
|
||||||
|
@objc
|
||||||
|
public func updatedObjects() -> Set<NSManagedObject> {
|
||||||
|
|
||||||
|
return self.swiftTransaction.updatedObjects()
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: Private
|
@available(*, deprecated, message: "Use -[deletedObjectsOfType:] and pass the specific entity class")
|
||||||
|
@objc
|
||||||
private let swiftTransaction: BaseDataTransaction
|
public func deletedObjects() -> Set<NSManagedObject> {
|
||||||
|
|
||||||
|
return self.swiftTransaction.deletedObjects()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// CSClauseTypes.swift
|
// CSClauseTypes.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// CSCoreStore+Migrating.swift
|
// CSCoreStore+Migrating.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// CSCoreStore+Observing.swift
|
// CSCoreStore+Observing.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2015 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -29,7 +29,7 @@ import CoreData
|
|||||||
|
|
||||||
// MARK: - CSCoreStore
|
// MARK: - CSCoreStore
|
||||||
|
|
||||||
@available(OSX 10.12, *)
|
@available(macOS 10.12, *)
|
||||||
public extension CSCoreStore {
|
public extension CSCoreStore {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// CSCoreStore+Querying.swift
|
// CSCoreStore+Querying.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// CSCoreStore+Setup.swift
|
// CSCoreStore+Setup.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -129,23 +129,14 @@ public extension CSCoreStore {
|
|||||||
|
|
||||||
// MARK: Deprecated
|
// MARK: Deprecated
|
||||||
|
|
||||||
/**
|
@available(*, deprecated, message: "Use the new +entityTypesByNameForType: method passing `[NSManagedObject class]` as argument.")
|
||||||
Returns the entity name-to-class type mapping from the `defaultStack`'s model.
|
|
||||||
*/
|
|
||||||
@available(*, deprecated: 3.1, message: "Use the new +entityTypesByNameForType: method passing `[NSManagedObject class]` as argument.")
|
|
||||||
@objc
|
@objc
|
||||||
public static var entityClassesByName: [EntityName: NSManagedObject.Type] {
|
public static var entityClassesByName: [EntityName: NSManagedObject.Type] {
|
||||||
|
|
||||||
return CoreStore.entityTypesByName
|
return CoreStore.entityTypesByName
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@available(*, deprecated, message: "Use the new +entityTypesByNameForType: method passing `[NSManagedObject class]` as argument.")
|
||||||
Returns the entity class for the given entity name from the `defaultStack`'s model.
|
|
||||||
|
|
||||||
- parameter name: the entity name
|
|
||||||
- returns: the `NSManagedObject` class for the given entity name, or `nil` if not found
|
|
||||||
*/
|
|
||||||
@available(*, deprecated: 3.1, message: "Use the new +entityTypesByNameForType: method passing `[NSManagedObject class]` as argument.")
|
|
||||||
@objc
|
@objc
|
||||||
public static func entityClassWithName(_ name: EntityName) -> NSManagedObject.Type? {
|
public static func entityClassWithName(_ name: EntityName) -> NSManagedObject.Type? {
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// CSCoreStore+Transaction.swift
|
// CSCoreStore+Transaction.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -95,12 +95,6 @@ public extension CSCoreStore {
|
|||||||
|
|
||||||
// MARK: Deprecated
|
// MARK: Deprecated
|
||||||
|
|
||||||
/**
|
|
||||||
Using the `defaultStack`, begins a transaction synchronously where `NSManagedObject` creates, updates, and deletes can be made.
|
|
||||||
|
|
||||||
- parameter closure: the block where creates, updates, and deletes can be made to the transaction. Transaction blocks are executed serially in a background queue, and all changes are made from a concurrent `NSManagedObjectContext`.
|
|
||||||
- returns: a `CSSaveResult` value indicating success or failure, or `nil` if the transaction was not comitted synchronously
|
|
||||||
*/
|
|
||||||
@available(*, deprecated, message: "Use the new +[CSCoreStore beginSynchronous:error:] API that reports failure using an error instance.")
|
@available(*, deprecated, message: "Use the new +[CSCoreStore beginSynchronous:error:] API that reports failure using an error instance.")
|
||||||
@objc
|
@objc
|
||||||
@discardableResult
|
@discardableResult
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// CSCoreStore.swift
|
// CSCoreStore.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// CSDataStack+Migrating.swift
|
// CSDataStack+Migrating.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// CSDataStack+Observing.swift
|
// CSDataStack+Observing.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -29,7 +29,7 @@ import CoreData
|
|||||||
|
|
||||||
// MARK: - CSDataStack
|
// MARK: - CSDataStack
|
||||||
|
|
||||||
@available(OSX 10.12, *)
|
@available(macOS 10.12, *)
|
||||||
public extension CSDataStack {
|
public extension CSDataStack {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// CSDataStack+Querying.swift
|
// CSDataStack+Querying.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -93,7 +93,8 @@ public extension CSDataStack {
|
|||||||
Thread.isMainThread,
|
Thread.isMainThread,
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside the main thread."
|
"Attempted to fetch from a \(cs_typeName(self)) outside the main thread."
|
||||||
)
|
)
|
||||||
return self.bridgeToSwift.mainContext.fetchOne(from, fetchClauses)
|
return (try? self.bridgeToSwift.mainContext.fetchOne(from, fetchClauses))?
|
||||||
|
.flatMap({ $0 })
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -110,7 +111,8 @@ public extension CSDataStack {
|
|||||||
Thread.isMainThread,
|
Thread.isMainThread,
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside the main thread."
|
"Attempted to fetch from a \(cs_typeName(self)) outside the main thread."
|
||||||
)
|
)
|
||||||
return self.bridgeToSwift.mainContext.fetchAll(from, fetchClauses)
|
return (try? self.bridgeToSwift.mainContext.fetchAll(from, fetchClauses))
|
||||||
|
.flatMap({ $0 })
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -127,9 +129,8 @@ public extension CSDataStack {
|
|||||||
Thread.isMainThread,
|
Thread.isMainThread,
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside the main thread."
|
"Attempted to fetch from a \(cs_typeName(self)) outside the main thread."
|
||||||
)
|
)
|
||||||
return self.bridgeToSwift.mainContext
|
return (try? self.bridgeToSwift.mainContext.fetchCount(from, fetchClauses))
|
||||||
.fetchCount(from, fetchClauses)
|
.flatMap({ NSNumber(value: $0) })
|
||||||
.flatMap { NSNumber(value: $0) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -146,7 +147,8 @@ public extension CSDataStack {
|
|||||||
Thread.isMainThread,
|
Thread.isMainThread,
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside the main thread."
|
"Attempted to fetch from a \(cs_typeName(self)) outside the main thread."
|
||||||
)
|
)
|
||||||
return self.bridgeToSwift.mainContext.fetchObjectID(from, fetchClauses)
|
return (try? self.bridgeToSwift.mainContext.fetchObjectID(from, fetchClauses))?
|
||||||
|
.flatMap({ $0 })
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -163,7 +165,8 @@ public extension CSDataStack {
|
|||||||
Thread.isMainThread,
|
Thread.isMainThread,
|
||||||
"Attempted to fetch from a \(cs_typeName(self)) outside the main thread."
|
"Attempted to fetch from a \(cs_typeName(self)) outside the main thread."
|
||||||
)
|
)
|
||||||
return self.bridgeToSwift.mainContext.fetchObjectIDs(from, fetchClauses)
|
return (try? self.bridgeToSwift.mainContext.fetchObjectIDs(from, fetchClauses))
|
||||||
|
.flatMap({ $0 })
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -183,7 +186,8 @@ public extension CSDataStack {
|
|||||||
Thread.isMainThread,
|
Thread.isMainThread,
|
||||||
"Attempted to query from a \(cs_typeName(self)) outside the main thread."
|
"Attempted to query from a \(cs_typeName(self)) outside the main thread."
|
||||||
)
|
)
|
||||||
return self.bridgeToSwift.mainContext.queryValue(from, selectClause, queryClauses)
|
return (try? self.bridgeToSwift.mainContext.queryValue(from, selectClause, queryClauses))
|
||||||
|
.flatMap({ $0 })
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -203,6 +207,7 @@ public extension CSDataStack {
|
|||||||
Thread.isMainThread,
|
Thread.isMainThread,
|
||||||
"Attempted to query from a \(cs_typeName(self)) outside the main thread."
|
"Attempted to query from a \(cs_typeName(self)) outside the main thread."
|
||||||
)
|
)
|
||||||
return self.bridgeToSwift.mainContext.queryAttributes(from, selectClause, queryClauses)
|
return (try? self.bridgeToSwift.mainContext.queryAttributes(from, selectClause, queryClauses))
|
||||||
|
.flatMap({ $0 })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// CSDataStack+Transaction.swift
|
// CSDataStack+Transaction.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -135,12 +135,6 @@ public extension CSDataStack {
|
|||||||
|
|
||||||
// MARK: Deprecated
|
// MARK: Deprecated
|
||||||
|
|
||||||
/**
|
|
||||||
Begins a transaction synchronously where `NSManagedObject` creates, updates, and deletes can be made.
|
|
||||||
|
|
||||||
- parameter closure: the block where creates, updates, and deletes can be made to the transaction. Transaction blocks are executed serially in a background queue, and all changes are made from a concurrent `NSManagedObjectContext`.
|
|
||||||
- returns: a `CSSaveResult` value indicating success or failure, or `nil` if the transaction was not comitted synchronously
|
|
||||||
*/
|
|
||||||
@available(*, deprecated, message: "Use the new -[CSDataStack beginSynchronous:error:] API that reports failure using an error instance.")
|
@available(*, deprecated, message: "Use the new -[CSDataStack beginSynchronous:error:] API that reports failure using an error instance.")
|
||||||
@objc
|
@objc
|
||||||
@discardableResult
|
@discardableResult
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// CSDataStack.swift
|
// CSDataStack.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -49,41 +49,22 @@ public final class CSDataStack: NSObject, CoreStoreObjectiveCType {
|
|||||||
/**
|
/**
|
||||||
Initializes a `CSDataStack` from the model with the specified `modelName` in the specified `bundle`.
|
Initializes a `CSDataStack` from the model with the specified `modelName` in the specified `bundle`.
|
||||||
|
|
||||||
- parameter modelName: the name of the (.xcdatamodeld) model file. If not specified, the application name (CFBundleName) will be used if it exists, or "CoreData" if it the bundle name was not set.
|
- parameter xcodeModelName: the name of the (.xcdatamodeld) model file. If not specified, the application name (CFBundleName) will be used if it exists, or "CoreData" if it the bundle name was not set.
|
||||||
- parameter bundle: an optional bundle to load models from. If not specified, the main bundle will be used.
|
- parameter bundle: an optional bundle to load .xcdatamodeld models from. If not specified, the main bundle will be used.
|
||||||
- parameter versionChain: the version strings that indicate the sequence of model versions to be used as the order for progressive migrations. If not specified, will default to a non-migrating data stack.
|
- parameter versionChain: the version strings that indicate the sequence of model versions to be used as the order for progressive migrations. If not specified, will default to a non-migrating data stack.
|
||||||
*/
|
*/
|
||||||
@objc
|
@objc
|
||||||
public convenience init(modelName: XcodeDataModelFileName?, bundle: Bundle?, versionChain: [String]?) {
|
public convenience init(xcodeModelName: XcodeDataModelFileName?, bundle: Bundle?, versionChain: [String]?) {
|
||||||
|
|
||||||
self.init(
|
self.init(
|
||||||
DataStack(
|
DataStack(
|
||||||
modelName: modelName ?? DataStack.applicationName,
|
xcodeModelName: xcodeModelName ?? DataStack.applicationName,
|
||||||
bundle: bundle ?? Bundle.main,
|
bundle: bundle ?? Bundle.main,
|
||||||
migrationChain: versionChain.flatMap { MigrationChain($0) } ?? nil
|
migrationChain: versionChain.flatMap { MigrationChain($0) } ?? nil
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Initializes a `CSDataStack` from the model with the specified `modelName` in the specified `bundle`.
|
|
||||||
|
|
||||||
- parameter modelName: the name of the (.xcdatamodeld) model file. If not specified, the application name (CFBundleName) will be used if it exists, or "CoreData" if it the bundle name was not set.
|
|
||||||
- parameter bundle: an optional bundle to load models from. If not specified, the main bundle will be used.
|
|
||||||
- parameter versionTree: the version strings that indicate the sequence of model versions to be used as the order for progressive migrations. If not specified, will default to a non-migrating data stack.
|
|
||||||
*/
|
|
||||||
@objc
|
|
||||||
public convenience init(modelName: XcodeDataModelFileName?, bundle: Bundle?, versionTree: [String: String]?) {
|
|
||||||
|
|
||||||
self.init(
|
|
||||||
DataStack(
|
|
||||||
modelName: modelName ?? DataStack.applicationName,
|
|
||||||
bundle: bundle ?? Bundle.main,
|
|
||||||
migrationChain: versionTree.flatMap { MigrationChain($0) } ?? nil
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns the stack's model version. The version string is the same as the name of the version-specific .xcdatamodeld file.
|
Returns the stack's model version. The version string is the same as the name of the version-specific .xcdatamodeld file.
|
||||||
*/
|
*/
|
||||||
@@ -227,13 +208,20 @@ public final class CSDataStack: NSObject, CoreStoreObjectiveCType {
|
|||||||
|
|
||||||
// MARK: Deprecated
|
// MARK: Deprecated
|
||||||
|
|
||||||
/**
|
@available(*, deprecated, message: "Use the -[initWithXcodeModelName:bundle:versionChain:] initializer.")
|
||||||
Initializes a `DataStack` from an `NSManagedObjectModel`.
|
@objc
|
||||||
|
public convenience init(modelName: XcodeDataModelFileName?, bundle: Bundle?, versionChain: [String]?) {
|
||||||
- parameter model: the `NSManagedObjectModel` for the stack
|
|
||||||
- parameter versionChain: the `MigrationChain` that indicates the sequence of model versions to be used as the order for progressive migrations. If not specified, will default to a non-migrating data stack.
|
self.init(
|
||||||
*/
|
DataStack(
|
||||||
@available(*, deprecated: 3.1, message: "Use the -[initWithModelName:bundle:versionChain:] initializer.")
|
xcodeModelName: modelName ?? DataStack.applicationName,
|
||||||
|
bundle: bundle ?? Bundle.main,
|
||||||
|
migrationChain: versionChain.flatMap { MigrationChain($0) } ?? nil
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@available(*, deprecated, message: "Use the -[initWithModelName:bundle:versionChain:] initializer.")
|
||||||
@objc
|
@objc
|
||||||
public convenience init(model: NSManagedObjectModel, versionChain: [String]?) {
|
public convenience init(model: NSManagedObjectModel, versionChain: [String]?) {
|
||||||
|
|
||||||
@@ -245,13 +233,7 @@ public final class CSDataStack: NSObject, CoreStoreObjectiveCType {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@available(*, deprecated, message: "Use the -[initWithModelName:bundle:versionTree:] initializer.")
|
||||||
Initializes a `DataStack` from an `NSManagedObjectModel`.
|
|
||||||
|
|
||||||
- parameter model: the `NSManagedObjectModel` for the stack
|
|
||||||
- parameter versionTree: the `MigrationChain` that indicates the sequence of model versions to be used as the order for progressive migrations. If not specified, will default to a non-migrating data stack.
|
|
||||||
*/
|
|
||||||
@available(*, deprecated: 3.1, message: "Use the -[initWithModelName:bundle:versionTree:] initializer.")
|
|
||||||
@objc
|
@objc
|
||||||
public convenience init(model: NSManagedObjectModel, versionTree: [String]?) {
|
public convenience init(model: NSManagedObjectModel, versionTree: [String]?) {
|
||||||
|
|
||||||
@@ -263,22 +245,14 @@ public final class CSDataStack: NSObject, CoreStoreObjectiveCType {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@available(*, deprecated, message: "Use the new -entityTypesByNameForType: method passing `[NSManagedObject class]` as argument.")
|
||||||
Returns the entity name-to-class type mapping from the stack's model.
|
|
||||||
*/
|
|
||||||
@available(*, deprecated: 3.1, message: "Use the new -entityTypesByNameForType: method passing `[NSManagedObject class]` as argument.")
|
|
||||||
@objc
|
@objc
|
||||||
public var entityClassesByName: [EntityName: NSManagedObject.Type] {
|
public var entityClassesByName: [EntityName: NSManagedObject.Type] {
|
||||||
|
|
||||||
return self.bridgeToSwift.entityTypesByName
|
return self.bridgeToSwift.entityTypesByName
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@available(*, deprecated, message: "Use the new -entityTypesByNameForType: method passing `[NSManagedObject class]` as argument.")
|
||||||
Returns the entity class for the given entity name from the stack's's model.
|
|
||||||
- parameter name: the entity name
|
|
||||||
- returns: the `NSManagedObject` class for the given entity name, or `nil` if not found
|
|
||||||
*/
|
|
||||||
@available(*, deprecated: 3.1, message: "Use the new -entityTypesByNameForType: method passing `[NSManagedObject class]` as argument.")
|
|
||||||
@objc
|
@objc
|
||||||
public func entityClassWithName(_ name: EntityName) -> NSManagedObject.Type? {
|
public func entityClassWithName(_ name: EntityName) -> NSManagedObject.Type? {
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// CSDynamicSchema.swift
|
// CSDynamicSchema.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2017 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// CSError.swift
|
// CSError.swift
|
||||||
// CoreStore
|
// CoreStore
|
||||||
//
|
//
|
||||||
// Copyright © 2016 John Rommel Estropia
|
// Copyright © 2018 John Rommel Estropia
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -217,6 +217,17 @@ extension CoreStoreError: CoreStoreSwiftType, _ObjectiveCBridgeableError {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
self = .progressiveMigrationRequired(localStoreURL: localStoreURL)
|
self = .progressiveMigrationRequired(localStoreURL: localStoreURL)
|
||||||
|
|
||||||
|
case .asynchronousMigrationRequired:
|
||||||
|
guard
|
||||||
|
let localStoreURL = info["localStoreURL"] as? URL,
|
||||||
|
case let nsError as NSError = info["NSError"]
|
||||||
|
else {
|
||||||
|
|
||||||
|
self = .unknown
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self = .asynchronousMigrationRequired(localStoreURL: localStoreURL, NSError: nsError)
|
||||||
|
|
||||||
case .internalError:
|
case .internalError:
|
||||||
guard case let nsError as NSError = info["NSError"] else {
|
guard case let nsError as NSError = info["NSError"] else {
|
||||||
@@ -236,6 +247,14 @@ extension CoreStoreError: CoreStoreSwiftType, _ObjectiveCBridgeableError {
|
|||||||
|
|
||||||
case .userCancelled:
|
case .userCancelled:
|
||||||
self = .userCancelled
|
self = .userCancelled
|
||||||
|
|
||||||
|
case .persistentStoreNotFound:
|
||||||
|
guard let entity = info["entity"] as? DynamicObject.Type else {
|
||||||
|
|
||||||
|
self = .unknown
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self = .persistentStoreNotFound(entity: entity)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user