From 0186aeffa2cf0340a9291a664902cb309bf8c5fe Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sat, 19 Aug 2017 12:27:54 -0700 Subject: [PATCH] Added Swift compile time check setting. Fixed issue, and then Xcode stopped beachballing, which means I can move back from my laptop to my iMac. Whew. --- .../RSDatabase.xcodeproj/project.pbxproj | 2 ++ .../RSDatabase/DatabaseLookupTable.swift | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Frameworks/RSDatabase/RSDatabase.xcodeproj/project.pbxproj b/Frameworks/RSDatabase/RSDatabase.xcodeproj/project.pbxproj index ab2506259..e2941a807 100755 --- a/Frameworks/RSDatabase/RSDatabase.xcodeproj/project.pbxproj +++ b/Frameworks/RSDatabase/RSDatabase.xcodeproj/project.pbxproj @@ -565,6 +565,7 @@ INFOPLIST_FILE = RSDatabase/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + OTHER_SWIFT_FLAGS = "-Xfrontend -warn-long-function-bodies=25"; PRODUCT_BUNDLE_IDENTIFIER = com.ranchero.RSDatabase; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -585,6 +586,7 @@ INFOPLIST_FILE = RSDatabase/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + OTHER_SWIFT_FLAGS = "-Xfrontend -warn-long-function-bodies=25"; PRODUCT_BUNDLE_IDENTIFIER = com.ranchero.RSDatabase; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; diff --git a/Frameworks/RSDatabase/RSDatabase/DatabaseLookupTable.swift b/Frameworks/RSDatabase/RSDatabase/DatabaseLookupTable.swift index 928aae0d0..ab4f6ef25 100644 --- a/Frameworks/RSDatabase/RSDatabase/DatabaseLookupTable.swift +++ b/Frameworks/RSDatabase/RSDatabase/DatabaseLookupTable.swift @@ -38,22 +38,27 @@ public final class DatabaseLookupTable { attachRelationshipsUsingLookupTable(to: objects, lookupTable: lookupTable, database: database) } - public func saveRelationships(for objects: [DatabaseObject], relationshipName: String, database: FMDatabase) { + public func saveRelationships(for objects: [DatabaseObject], database: FMDatabase) { var objectsWithNoRelationships = [DatabaseObject]() var objectsWithRelationships = [DatabaseObject]() - objects.forEach { (object) - if let relatedObjects = object.relatedObjectsWithName(relationshipsName) + for object in objects { + if let relatedObjects = object.relatedObjectsWithName(relationshipName), !relatedObjects.isEmpty { + objectsWithRelationships += [object] + } + else { + objectsWithNoRelationships += [object] + } } - + + removeRelationships(for: objectsWithNoRelationships, database: database) } - } private extension DatabaseLookupTable { - func removeRelationships(for objects: [DatabaseObject], relationshipName: String, database: FMDatabase) { + func removeRelationships(for objects: [DatabaseObject], database: FMDatabase) { removeLookupsForForeignIDs(objects.databaseIDs(), database) } @@ -196,7 +201,7 @@ struct LookupValue: Hashable { self.primaryID = primaryID self.foreignID = foreignID - self.hashValue = "\(primaryID)\(foreignID)".hashValue + self.hashValue = (primaryID + foreignID).hashValue } static public func ==(lhs: LookupValue, rhs: LookupValue) -> Bool {