diff --git a/iOSDemo/Cartfile.resolved b/iOSDemo/Cartfile.resolved
index c292f9d9..fdaadcef 100644
--- a/iOSDemo/Cartfile.resolved
+++ b/iOSDemo/Cartfile.resolved
@@ -1,3 +1,3 @@
-github "3lvis/Networking" "4.1.1"
-github "3lvis/Sync" "4.0.3"
-github "Alamofire/Alamofire" "4.5.1"
+github "3lvis/Networking" "4.2.0"
+github "3lvis/Sync" "4.1.1"
+github "Alamofire/Alamofire" "4.6.0"
diff --git a/iOSDemo/Carthage/Build/.Alamofire.version b/iOSDemo/Carthage/Build/.Alamofire.version
index 492eff93..25a977c5 100644
--- a/iOSDemo/Carthage/Build/.Alamofire.version
+++ b/iOSDemo/Carthage/Build/.Alamofire.version
@@ -1,9 +1,27 @@
{
- "commitish" : "4.5.1",
+ "Mac" : [
+ {
+ "name" : "Alamofire",
+ "hash" : "a8b6c2767233f8d050a976027721a3499b754242ae464ad61372d905490d2d7a"
+ }
+ ],
+ "watchOS" : [
+ {
+ "name" : "Alamofire",
+ "hash" : "2e051ade20bec88646730660fcbfc290453ae9676e7ee11dcd9468aad3939dc0"
+ }
+ ],
+ "tvOS" : [
+ {
+ "name" : "Alamofire",
+ "hash" : "7d7d3b2135a35045e2007a367591be85b00e1723cd8e8bf029786818b1d84aeb"
+ }
+ ],
+ "commitish" : "4.6.0",
"iOS" : [
{
"name" : "Alamofire",
- "hash" : "359195014cabb582d7ba0f68eb9bd1432ff47275d3c7a4d47859331bb40bd8c6"
+ "hash" : "95edb1d90081cd504de2507ce2907da9e4b6c160c4cc614a03bd662d19a6bc7d"
}
]
}
\ No newline at end of file
diff --git a/iOSDemo/Carthage/Build/.Networking.version b/iOSDemo/Carthage/Build/.Networking.version
index 08e94cdd..f2ac8bde 100644
--- a/iOSDemo/Carthage/Build/.Networking.version
+++ b/iOSDemo/Carthage/Build/.Networking.version
@@ -2,26 +2,26 @@
"Mac" : [
{
"name" : "Networking",
- "hash" : "63bda7f65926d32ed8b9cdfc258479da58b9a7a534a122ba6ffa72e6f60b536d"
+ "hash" : "80f1e9435992856e60a0b45e47cf2586e21ea661744babe389b8c332d6a1504e"
}
],
"watchOS" : [
{
"name" : "Networking",
- "hash" : "9190165887b5b42687394ca2051b83c9e30d4f9ed4cd11c3822eaf9015540226"
+ "hash" : "617dc58efad4ac03a9a4fd9ddedb817d8dcb61c9a070fbafbd7010fd59feaa09"
}
],
"tvOS" : [
{
"name" : "Networking",
- "hash" : "226e0553d2700b3789d1920e756cf2279059ee40de19146c00aa3746e26fba7a"
+ "hash" : "06eac35f21c5db103bfcad3e008166b506674047ed5d8a6add1714c802903644"
}
],
- "commitish" : "4.1.1",
+ "commitish" : "4.2.0",
"iOS" : [
{
"name" : "Networking",
- "hash" : "de1327dad50ea73e2b471d3a84f4ba33698ee34960ca26cc163f50dd0c4442a8"
+ "hash" : "cc80f9927ef6576a0cddc8929e2ce9ec8819ad45139c5876d9cf023dca4e61cd"
}
]
}
\ No newline at end of file
diff --git a/iOSDemo/Carthage/Build/.Sync.version b/iOSDemo/Carthage/Build/.Sync.version
index 85115ace..cef2d1da 100644
--- a/iOSDemo/Carthage/Build/.Sync.version
+++ b/iOSDemo/Carthage/Build/.Sync.version
@@ -1,9 +1,27 @@
{
- "commitish" : "4.0.3",
+ "Mac" : [
+ {
+ "name" : "Sync",
+ "hash" : "2797183da7448fff5975a0d2b4894ff2c3c47f72f0759f941b2fc5e40dbfd2ce"
+ }
+ ],
+ "watchOS" : [
+ {
+ "name" : "Sync",
+ "hash" : "b52728199d34be073b8d34e7d7a5cb570b73b64d79afd3a7b05e99cf390f9261"
+ }
+ ],
+ "tvOS" : [
+ {
+ "name" : "Sync",
+ "hash" : "21295409eb17d8c8bb1b5ca037afcb337dad84f58b51e54a2c2f2c04a44cb8a4"
+ }
+ ],
+ "commitish" : "4.1.1",
"iOS" : [
{
"name" : "Sync",
- "hash" : "e38ddb444826f90a823d94710bd0fc4f5a9b6fed2093647118bd03cd5e18479e"
+ "hash" : "64d3d524ac7e11d4db22fd21e656e296f0289b69d41cbe5205ad70b1ac7156e2"
}
]
}
\ No newline at end of file
diff --git a/iOSDemo/Carthage/Build/iOS/Alamofire.framework.dSYM/Contents/Info.plist b/iOSDemo/Carthage/Build/iOS/Alamofire.framework.dSYM/Contents/Info.plist
index 7a61759b..849c8dc0 100644
--- a/iOSDemo/Carthage/Build/iOS/Alamofire.framework.dSYM/Contents/Info.plist
+++ b/iOSDemo/Carthage/Build/iOS/Alamofire.framework.dSYM/Contents/Info.plist
@@ -13,7 +13,7 @@
CFBundleSignature
????
CFBundleShortVersionString
- 4.5.1
+ 4.6.0
CFBundleVersion
1
diff --git a/iOSDemo/Carthage/Build/iOS/Alamofire.framework.dSYM/Contents/Resources/DWARF/Alamofire b/iOSDemo/Carthage/Build/iOS/Alamofire.framework.dSYM/Contents/Resources/DWARF/Alamofire
index d3ef3136..860f9772 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Alamofire.framework.dSYM/Contents/Resources/DWARF/Alamofire and b/iOSDemo/Carthage/Build/iOS/Alamofire.framework.dSYM/Contents/Resources/DWARF/Alamofire differ
diff --git a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Alamofire b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Alamofire
index dadea54e..ad1dff8e 100755
Binary files a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Alamofire and b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Alamofire differ
diff --git a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Headers/Alamofire-Swift.h b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Headers/Alamofire-Swift.h
index 034ddaa9..2fd267da 100644
--- a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Headers/Alamofire-Swift.h
+++ b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Headers/Alamofire-Swift.h
@@ -1,4 +1,4 @@
-// Generated by Apple Swift version 4.0.2 effective-3.2.2 (swiftlang-900.0.69.2 clang-900.0.38)
+// Generated by Apple Swift version 4.0.3 effective-3.2.3 (swiftlang-900.0.74.1 clang-900.0.39.2)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"
diff --git a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Info.plist b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Info.plist
index 60cd7fb0..452393f3 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Info.plist and b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Info.plist differ
diff --git a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/arm.swiftdoc b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/arm.swiftdoc
index 7318a117..7c2acdbd 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/arm.swiftdoc and b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/arm.swiftdoc differ
diff --git a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/arm.swiftmodule b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/arm.swiftmodule
index d6fb3dd9..2eebc1f1 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/arm.swiftmodule and b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/arm.swiftmodule differ
diff --git a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/arm64.swiftdoc b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/arm64.swiftdoc
index c5910dd8..4a389392 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/arm64.swiftdoc and b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/arm64.swiftdoc differ
diff --git a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/arm64.swiftmodule b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/arm64.swiftmodule
index b334a3ae..df3fc8af 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/arm64.swiftmodule and b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/arm64.swiftmodule differ
diff --git a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/i386.swiftdoc b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/i386.swiftdoc
index 6899ec3f..88965b07 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/i386.swiftdoc and b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/i386.swiftdoc differ
diff --git a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/i386.swiftmodule b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/i386.swiftmodule
index 6ca56faf..1a46859c 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/i386.swiftmodule and b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/i386.swiftmodule differ
diff --git a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/x86_64.swiftdoc b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/x86_64.swiftdoc
index 3de50ba6..6d851deb 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/x86_64.swiftdoc and b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/x86_64.swiftdoc differ
diff --git a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/x86_64.swiftmodule b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/x86_64.swiftmodule
index 79187abf..b082e062 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/x86_64.swiftmodule and b/iOSDemo/Carthage/Build/iOS/Alamofire.framework/Modules/Alamofire.swiftmodule/x86_64.swiftmodule differ
diff --git a/iOSDemo/Carthage/Build/iOS/Networking.framework.dSYM/Contents/Resources/DWARF/Networking b/iOSDemo/Carthage/Build/iOS/Networking.framework.dSYM/Contents/Resources/DWARF/Networking
index 9f6abd50..c93dcea5 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Networking.framework.dSYM/Contents/Resources/DWARF/Networking and b/iOSDemo/Carthage/Build/iOS/Networking.framework.dSYM/Contents/Resources/DWARF/Networking differ
diff --git a/iOSDemo/Carthage/Build/iOS/Networking.framework/Headers/Networking-Swift.h b/iOSDemo/Carthage/Build/iOS/Networking.framework/Headers/Networking-Swift.h
index ef1a170b..c4b169e0 100644
--- a/iOSDemo/Carthage/Build/iOS/Networking.framework/Headers/Networking-Swift.h
+++ b/iOSDemo/Carthage/Build/iOS/Networking.framework/Headers/Networking-Swift.h
@@ -1,4 +1,4 @@
-// Generated by Apple Swift version 4.0.2 (swiftlang-900.0.69.2 clang-900.0.38)
+// Generated by Apple Swift version 4.0.3 (swiftlang-900.0.74.1 clang-900.0.39.2)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"
diff --git a/iOSDemo/Carthage/Build/iOS/Networking.framework/Info.plist b/iOSDemo/Carthage/Build/iOS/Networking.framework/Info.plist
index 14f0d134..10e3e7b9 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Networking.framework/Info.plist and b/iOSDemo/Carthage/Build/iOS/Networking.framework/Info.plist differ
diff --git a/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/arm.swiftdoc b/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/arm.swiftdoc
index cb8078c1..d55cf3d9 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/arm.swiftdoc and b/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/arm.swiftdoc differ
diff --git a/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/arm.swiftmodule b/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/arm.swiftmodule
index f5f6b8e8..64d96991 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/arm.swiftmodule and b/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/arm.swiftmodule differ
diff --git a/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/arm64.swiftdoc b/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/arm64.swiftdoc
index 5060e832..93449547 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/arm64.swiftdoc and b/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/arm64.swiftdoc differ
diff --git a/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/arm64.swiftmodule b/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/arm64.swiftmodule
index dd10f8bf..6f8f0375 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/arm64.swiftmodule and b/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/arm64.swiftmodule differ
diff --git a/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/i386.swiftdoc b/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/i386.swiftdoc
index a385fe58..c16b8abc 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/i386.swiftdoc and b/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/i386.swiftdoc differ
diff --git a/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/i386.swiftmodule b/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/i386.swiftmodule
index f0982e65..835a6289 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/i386.swiftmodule and b/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/i386.swiftmodule differ
diff --git a/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/x86_64.swiftdoc b/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/x86_64.swiftdoc
index 86fae571..a3cfbc6c 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/x86_64.swiftdoc and b/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/x86_64.swiftdoc differ
diff --git a/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/x86_64.swiftmodule b/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/x86_64.swiftmodule
index a352aa59..6cda7e81 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/x86_64.swiftmodule and b/iOSDemo/Carthage/Build/iOS/Networking.framework/Modules/Networking.swiftmodule/x86_64.swiftmodule differ
diff --git a/iOSDemo/Carthage/Build/iOS/Networking.framework/Networking b/iOSDemo/Carthage/Build/iOS/Networking.framework/Networking
index 07dc429f..f169f0e2 100755
Binary files a/iOSDemo/Carthage/Build/iOS/Networking.framework/Networking and b/iOSDemo/Carthage/Build/iOS/Networking.framework/Networking differ
diff --git a/iOSDemo/Carthage/Build/iOS/Sync.framework.dSYM/Contents/Resources/DWARF/Sync b/iOSDemo/Carthage/Build/iOS/Sync.framework.dSYM/Contents/Resources/DWARF/Sync
index 8d5153be..8364fc46 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Sync.framework.dSYM/Contents/Resources/DWARF/Sync and b/iOSDemo/Carthage/Build/iOS/Sync.framework.dSYM/Contents/Resources/DWARF/Sync differ
diff --git a/iOSDemo/Carthage/Build/iOS/Sync.framework/Headers/DataStack.swift b/iOSDemo/Carthage/Build/iOS/Sync.framework/Headers/DataStack.swift
index a25f39a6..3f454bd3 100755
--- a/iOSDemo/Carthage/Build/iOS/Sync.framework/Headers/DataStack.swift
+++ b/iOSDemo/Carthage/Build/iOS/Sync.framework/Headers/DataStack.swift
@@ -27,6 +27,8 @@ import CoreData
private var containerURL = URL.directoryURL()
+ private let backgroundContextName = "DataStack.backgroundContextName"
+
/**
The context for the main queue. Please do not use this to mutate data, use `performInNewBackgroundContext`
instead.
@@ -232,6 +234,7 @@ import CoreData
*/
@objc public func newBackgroundContext() -> NSManagedObjectContext {
let context = NSManagedObjectContext(concurrencyType: DataStack.backgroundConcurrencyType())
+ context.name = backgroundContextName
context.persistentStoreCoordinator = self.persistentStoreCoordinator
context.undoManager = nil
context.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy
@@ -373,6 +376,11 @@ import CoreData
// Can't be private, has to be internal in order to be used as a selector.
@objc func backgroundContextDidSave(_ notification: Notification) throws {
+ let context = notification.object as? NSManagedObjectContext
+ guard context?.name == backgroundContextName else {
+ return
+ }
+
if Thread.isMainThread && TestCheck.isTesting == false {
throw NSError(info: "Background context saved in the main thread. Use context's `performBlock`", previousError: nil)
} else {
diff --git a/iOSDemo/Carthage/Build/iOS/Sync.framework/Headers/NSManagedObject+Sync.swift b/iOSDemo/Carthage/Build/iOS/Sync.framework/Headers/NSManagedObject+Sync.swift
index 2d9b1010..f37e989e 100644
--- a/iOSDemo/Carthage/Build/iOS/Sync.framework/Headers/NSManagedObject+Sync.swift
+++ b/iOSDemo/Carthage/Build/iOS/Sync.framework/Headers/NSManagedObject+Sync.swift
@@ -186,14 +186,21 @@ extension NSManagedObject {
}
}
- /**
- Syncs the entity's to-many relationship, it will also sync the childs of this relationship.
- - parameter relationship: The relationship to be synced.
- - parameter dictionary: The JSON with the changes to be applied to the entity.
- - parameter parent: The parent of the entity, optional since many entities are orphans.
- - parameter dataStack: The DataStack instance.
- */
+ /// Syncs the entity's to-many relationship, it will also sync the childs of this relationship.
+ ///
+ /// - Parameters:
+ /// - relationship: The relationship to be synced.
+ /// - dictionary: The JSON with the changes to be applied to the entity.
+ /// - parent: The parent of the entity, optional since many entities are orphans.
+ /// - parentRelationship: The relationship from which the parent was referenced.
+ /// - context: The NSManagedContext involving the current Core Data operation.
+ /// - operations: The Sync.Operation options to be used for this operation.
+ /// - shouldContinueBlock: A block that checks wheter the Sync process should continue to the next element or stop. This is used in conjunction to operations, if the operation is cancelled the Sync process will stop.
+ /// - objectJSONBlock: A block that gives the oportunity to the called to act on the current processed JSON.
+ /// - Throws: An exception that will throw if any of the underlaying operations fail.
func sync_toManyRelationship(_ relationship: NSRelationshipDescription, dictionary: [String: Any], parent: NSManagedObject?, parentRelationship: NSRelationshipDescription?, context: NSManagedObjectContext, operations: Sync.OperationOptions, shouldContinueBlock: (() -> Bool)?, objectJSONBlock: ((_ objectJSON: [String: Any]) -> [String: Any])?) throws {
+ let updatedOperations = operations.relationshipOperations()
+
var children: [[String: Any]]?
let childrenIsNull = (relationship.customKey as Any?) is NSNull || dictionary[relationship.name.hyp_snakeCase()] is NSNull || dictionary[relationship.name] is NSNull
if childrenIsNull {
@@ -223,7 +230,6 @@ extension NSManagedObject {
}
let inverseIsToMany = relationship.inverseRelationship?.isToMany ?? false
- guard let managedObjectContext = managedObjectContext else { abort() }
guard let destinationEntity = relationship.destinationEntity else { abort() }
guard let childEntityName = destinationEntity.name else { abort() }
@@ -254,7 +260,7 @@ extension NSManagedObject {
var safeLocalObjects: [NSManagedObject]?
if deletedItems.count > 0 {
- safeLocalObjects = try managedObjectContext.fetch(request) as? [NSManagedObject] ?? [NSManagedObject]()
+ safeLocalObjects = try context.fetch(request) as? [NSManagedObject] ?? [NSManagedObject]()
for safeObject in safeLocalObjects! {
let currentID = safeObject.value(forKey: safeObject.entity.sync_localPrimaryKey())!
for deleted in deletedItems {
@@ -282,7 +288,7 @@ extension NSManagedObject {
if let safeLocalObjects = safeLocalObjects {
objects = safeLocalObjects
} else {
- objects = try managedObjectContext.fetch(request) as? [NSManagedObject] ?? [NSManagedObject]()
+ objects = try context.fetch(request) as? [NSManagedObject] ?? [NSManagedObject]()
}
for safeObject in objects {
let currentID = safeObject.value(forKey: safeObject.entity.sync_localPrimaryKey())!
@@ -300,20 +306,26 @@ extension NSManagedObject {
var childPredicate: NSPredicate?
let manyToMany = inverseIsToMany && relationship.isToMany
- var childOperations = operations
+ var childOperations = updatedOperations
if manyToMany {
childOperations.remove(.delete)
if ((childIDs as Any) as AnyObject).count > 0 {
- guard let entity = NSEntityDescription.entity(forEntityName: childEntityName, in: managedObjectContext) else { fatalError() }
+ guard let entity = NSEntityDescription.entity(forEntityName: childEntityName, in: context) else { fatalError() }
guard let childIDsObject = childIDs as? NSObject else { fatalError() }
childPredicate = NSPredicate(format: "ANY %K IN %@", entity.sync_localPrimaryKey(), childIDsObject)
}
} else {
guard let inverseEntityName = relationship.inverseRelationship?.name else { fatalError() }
childPredicate = NSPredicate(format: "%K = %@", inverseEntityName, self)
+
+ if ((childIDs as Any) as AnyObject).count > 0 {
+ guard let entity = NSEntityDescription.entity(forEntityName: childEntityName, in: context) else { fatalError() }
+ guard let childIDsObject = childIDs as? NSObject else { fatalError() }
+ childPredicate = NSPredicate(format: "ANY %K IN %@ OR %K = %@", entity.sync_localPrimaryKey(), childIDsObject, inverseEntityName, self)
+ }
}
- try Sync.changes(children, inEntityNamed: childEntityName, predicate: childPredicate, parent: self, parentRelationship: relationship, inContext: managedObjectContext, operations: childOperations, shouldContinueBlock: shouldContinueBlock, objectJSONBlock: objectJSONBlock)
+ try Sync.changes(children, inEntityNamed: childEntityName, predicate: childPredicate, parent: self, parentRelationship: relationship, inContext: context, operations: childOperations, shouldContinueBlock: shouldContinueBlock, objectJSONBlock: objectJSONBlock)
} else {
var destinationIsParentSuperEntity = false
if let parent = parent, let destinationEntityName = relationship.destinationEntity?.name {
@@ -379,6 +391,7 @@ extension NSManagedObject {
*/
func sync_toOneRelationship(_ relationship: NSRelationshipDescription, dictionary: [String: Any], context: NSManagedObjectContext, operations: Sync.OperationOptions, shouldContinueBlock: (() -> Bool)?, objectJSONBlock: ((_ objectJSON: [String: Any]) -> [String: Any])?) {
var filteredObjectDictionary: [String: Any]?
+ var jsonContainsRelationship = false
if let customRelationshipName = relationship.customKey {
if customRelationshipName.contains(".") {
@@ -386,11 +399,13 @@ extension NSManagedObject {
if let rootObject = dictionary[deepMappingRootKey] as? [String: Any] {
if let deepMappingLeaveKey = customRelationshipName.components(separatedBy: ".").last {
filteredObjectDictionary = rootObject[deepMappingLeaveKey] as? [String: Any]
+ jsonContainsRelationship = rootObject[deepMappingLeaveKey] != nil
}
}
}
} else {
filteredObjectDictionary = dictionary[customRelationshipName] as? [String: Any]
+ jsonContainsRelationship = dictionary[customRelationshipName] != nil
}
} else if let result = dictionary[relationship.name.hyp_snakeCase()] as? [String: Any] {
filteredObjectDictionary = result
@@ -398,6 +413,11 @@ extension NSManagedObject {
filteredObjectDictionary = result
}
+ // Check if the JSON contains key, so we know if we should delete null values
+ if !jsonContainsRelationship {
+ jsonContainsRelationship = dictionary[relationship.name.hyp_snakeCase()] != nil || dictionary[relationship.name] != nil
+ }
+
if let toOneObjectDictionary = filteredObjectDictionary {
guard let managedObjectContext = self.managedObjectContext else { return }
guard let destinationEntity = relationship.destinationEntity else { return }
@@ -413,7 +433,7 @@ extension NSManagedObject {
if currentRelationship == nil || !(currentRelationship! as AnyObject).isEqual(object) {
setValue(object, forKey: relationship.name)
}
- } else {
+ } else if jsonContainsRelationship {
let currentRelationship = self.value(forKey: relationship.name)
if currentRelationship != nil {
setValue(nil, forKey: relationship.name)
diff --git a/iOSDemo/Carthage/Build/iOS/Sync.framework/Headers/Sync-Swift.h b/iOSDemo/Carthage/Build/iOS/Sync.framework/Headers/Sync-Swift.h
index 97d79ab3..200f3a64 100644
--- a/iOSDemo/Carthage/Build/iOS/Sync.framework/Headers/Sync-Swift.h
+++ b/iOSDemo/Carthage/Build/iOS/Sync.framework/Headers/Sync-Swift.h
@@ -1,4 +1,4 @@
-// Generated by Apple Swift version 4.0.2 (swiftlang-900.0.69.2 clang-900.0.38)
+// Generated by Apple Swift version 4.0.3 (swiftlang-900.0.74.1 clang-900.0.39.2)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"
diff --git a/iOSDemo/Carthage/Build/iOS/Sync.framework/Headers/Sync.swift b/iOSDemo/Carthage/Build/iOS/Sync.framework/Headers/Sync.swift
index 67216472..c7fde3d4 100644
--- a/iOSDemo/Carthage/Build/iOS/Sync.framework/Headers/Sync.swift
+++ b/iOSDemo/Carthage/Build/iOS/Sync.framework/Headers/Sync.swift
@@ -27,7 +27,28 @@ public protocol SyncDelegate: class {
public static let insert = OperationOptions(rawValue: 1 << 0)
public static let update = OperationOptions(rawValue: 1 << 1)
public static let delete = OperationOptions(rawValue: 1 << 2)
- public static let all: OperationOptions = [.insert, .update, .delete]
+ public static let insertRelationships = OperationOptions(rawValue: 1 << 3)
+ public static let updateRelationships = OperationOptions(rawValue: 1 << 4)
+ public static let deleteRelationships = OperationOptions(rawValue: 1 << 5)
+ public static let all: OperationOptions = [.insert, .update, .delete, .insertRelationships, .updateRelationships, .deleteRelationships]
+
+ func relationshipOperations() -> OperationOptions {
+ var options = OperationOptions.all
+
+ if !self.contains(.insertRelationships) {
+ options.remove(.insert)
+ }
+
+ if !self.contains(.updateRelationships) {
+ options.remove(.update)
+ }
+
+ if !self.contains(.deleteRelationships) {
+ options.remove(.delete)
+ }
+
+ return options
+ }
}
var downloadFinished = false
diff --git a/iOSDemo/Carthage/Build/iOS/Sync.framework/Info.plist b/iOSDemo/Carthage/Build/iOS/Sync.framework/Info.plist
index 6d6a3fd4..a8934227 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Sync.framework/Info.plist and b/iOSDemo/Carthage/Build/iOS/Sync.framework/Info.plist differ
diff --git a/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/arm.swiftdoc b/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/arm.swiftdoc
index 43c66716..6ecf895c 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/arm.swiftdoc and b/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/arm.swiftdoc differ
diff --git a/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/arm.swiftmodule b/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/arm.swiftmodule
index ec81a430..e113969c 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/arm.swiftmodule and b/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/arm.swiftmodule differ
diff --git a/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/arm64.swiftdoc b/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/arm64.swiftdoc
index 026374ff..aac19591 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/arm64.swiftdoc and b/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/arm64.swiftdoc differ
diff --git a/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/arm64.swiftmodule b/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/arm64.swiftmodule
index 4817da53..c19f1475 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/arm64.swiftmodule and b/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/arm64.swiftmodule differ
diff --git a/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/i386.swiftdoc b/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/i386.swiftdoc
index 241b46bf..d2f296ab 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/i386.swiftdoc and b/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/i386.swiftdoc differ
diff --git a/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/i386.swiftmodule b/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/i386.swiftmodule
index 78e1288f..eecaf964 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/i386.swiftmodule and b/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/i386.swiftmodule differ
diff --git a/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/x86_64.swiftdoc b/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/x86_64.swiftdoc
index 9418526f..aa14775b 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/x86_64.swiftdoc and b/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/x86_64.swiftdoc differ
diff --git a/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/x86_64.swiftmodule b/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/x86_64.swiftmodule
index ea3b08f8..cb4767ff 100644
Binary files a/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/x86_64.swiftmodule and b/iOSDemo/Carthage/Build/iOS/Sync.framework/Modules/Sync.swiftmodule/x86_64.swiftmodule differ
diff --git a/iOSDemo/Carthage/Build/iOS/Sync.framework/Sync b/iOSDemo/Carthage/Build/iOS/Sync.framework/Sync
index 75b37957..32b93bb4 100755
Binary files a/iOSDemo/Carthage/Build/iOS/Sync.framework/Sync and b/iOSDemo/Carthage/Build/iOS/Sync.framework/Sync differ