diff --git a/ios/SAPTracker/src/xcode/SAPTracker/AppDelegate.swift b/ios/SAPTracker/src/xcode/SAPTracker/AppDelegate.swift index d6a8a06acfc..d06dfd7d3df 100644 --- a/ios/SAPTracker/src/xcode/SAPTracker/AppDelegate.swift +++ b/ios/SAPTracker/src/xcode/SAPTracker/AppDelegate.swift @@ -23,7 +23,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { if let gpsFixes = checkIn.gpsFixes { if gpsFixes.count > 0 { noData = false - let gpsFixController = GPSFixController(checkIn: checkIn) + let gpsFixController = GPSFixController(checkIn: checkIn, coreDataManager: RegattaCoreDataManager.shared) gpsFixController.sendAll(completion: { (withSuccess) in allSuccess = allSuccess && withSuccess }) diff --git a/ios/SAPTracker/src/xcode/SAPTracker/CheckIn.swift b/ios/SAPTracker/src/xcode/SAPTracker/CheckIn.swift index d74924f3236..aeea120839f 100644 --- a/ios/SAPTracker/src/xcode/SAPTracker/CheckIn.swift +++ b/ios/SAPTracker/src/xcode/SAPTracker/CheckIn.swift @@ -12,11 +12,6 @@ import CoreData @objc(CheckIn) class CheckIn: NSManagedObject { - func initialize() { - event = RegattaCoreDataManager.shared.newEvent(checkIn: self) - leaderboard = RegattaCoreDataManager.shared.newLeaderboard(checkIn: self) - } - func updateWithCheckInData(checkInData: CheckInData) { serverURL = checkInData.serverURL event.updateWithEventData(eventData: checkInData.eventData) diff --git a/ios/SAPTracker/src/xcode/SAPTracker/CheckInController.swift b/ios/SAPTracker/src/xcode/SAPTracker/CheckInController.swift index a4d5bdf6ae3..32a566097e6 100644 --- a/ios/SAPTracker/src/xcode/SAPTracker/CheckInController.swift +++ b/ios/SAPTracker/src/xcode/SAPTracker/CheckInController.swift @@ -18,10 +18,16 @@ import AVFoundation class CheckInController : NSObject { + weak var coreDataManager: CoreDataManager! weak var delegate: CheckInControllerDelegate? fileprivate var requestManager = RequestManager() + init(coreDataManager: CoreDataManager) { + self.coreDataManager = coreDataManager + super.init() + } + // MARK: - CheckIn func checkIn(checkInData: CheckInData, completion: @escaping (_ withSuccess: Bool) -> Void) { @@ -92,23 +98,23 @@ class CheckInController : NSObject { fileprivate func postCheckInSuccess(checkInData: CheckInData, completion: (_ withSuccess: Bool) -> Void) { switch checkInData.type { case .competitor: - let competitorCheckIn = RegattaCoreDataManager.shared.fetchCompetitorCheckIn( + let competitorCheckIn = coreDataManager.fetchCompetitorCheckIn( eventID: checkInData.eventID, leaderboardName: checkInData.leaderboardName, competitorID: checkInData.competitorID! - ) ?? RegattaCoreDataManager.shared.newCompetitorCheckIn() + ) ?? coreDataManager.newCompetitorCheckIn() competitorCheckIn.updateWithCheckInData(checkInData: checkInData) - RegattaCoreDataManager.shared.saveContext() + coreDataManager.saveContext() checkInDidFinish(withSuccess: true, completion: completion) break case .mark: - let markCheckIn = RegattaCoreDataManager.shared.fetchMarkCheckIn( + let markCheckIn = coreDataManager.fetchMarkCheckIn( eventID: checkInData.eventID, leaderboardName: checkInData.leaderboardName, markID: checkInData.markID! - ) ?? RegattaCoreDataManager.shared.newMarkCheckIn() + ) ?? coreDataManager.newMarkCheckIn() markCheckIn.updateWithCheckInData(checkInData: checkInData) - RegattaCoreDataManager.shared.saveContext() + coreDataManager.saveContext() checkInDidFinish(withSuccess: true, completion: completion) break } diff --git a/ios/SAPTracker/src/xcode/SAPTracker/CompetitorViewController.swift b/ios/SAPTracker/src/xcode/SAPTracker/CompetitorViewController.swift index 60f08783472..3b8f7291393 100644 --- a/ios/SAPTracker/src/xcode/SAPTracker/CompetitorViewController.swift +++ b/ios/SAPTracker/src/xcode/SAPTracker/CompetitorViewController.swift @@ -31,6 +31,7 @@ class CompetitorViewController : SessionViewController, UINavigationControllerDe @IBOutlet weak var announcementLabel: UILabel! weak var competitorCheckIn: CompetitorCheckIn! + weak var coreDataManager: CoreDataManager! weak var countdownTimer: Timer? @@ -173,7 +174,7 @@ class CompetitorViewController : SessionViewController, UINavigationControllerDe teamImageView.image = image competitorCheckIn.teamImageRetry = false competitorCheckIn.teamImageData = UIImageJPEGRepresentation(image, 0.8) - RegattaCoreDataManager.shared.saveContext() + coreDataManager.saveContext() success() } @@ -300,7 +301,7 @@ class CompetitorViewController : SessionViewController, UINavigationControllerDe // MARK: - Properties fileprivate lazy var competitorSessionController: CompetitorSessionController = { - return CompetitorSessionController(checkIn: self.competitorCheckIn) + return CompetitorSessionController(checkIn: self.competitorCheckIn, coreDataManager: self.coreDataManager) }() } @@ -329,7 +330,7 @@ extension CompetitorViewController: UIImagePickerControllerDelegate { fileprivate func pickedImage(image: UIImage) { teamImageView.image = image competitorCheckIn.teamImageData = UIImageJPEGRepresentation(image, 0.8) - RegattaCoreDataManager.shared.saveContext() + coreDataManager.saveContext() if let data = competitorCheckIn.teamImageData { uploadTeamImageData(imageData: data) } @@ -354,13 +355,13 @@ extension CompetitorViewController: UIImagePickerControllerDelegate { fileprivate func uploadTeamImageDataSuccess(teamImageURL: String) { competitorCheckIn.teamImageRetry = false competitorCheckIn.teamImageURL = teamImageURL - RegattaCoreDataManager.shared.saveContext() + coreDataManager.saveContext() refreshTeamImage() } fileprivate func uploadTeamImageDataFailure(error: Error) { competitorCheckIn.teamImageRetry = true - RegattaCoreDataManager.shared.saveContext() + coreDataManager.saveContext() showUploadTeamImageFailureAlert(error: error) refreshTeamImage() } @@ -391,8 +392,8 @@ extension CompetitorViewController: SessionViewControllerDelegate { } fileprivate func performCheckOutCompleted(withSuccess: Bool) { - RegattaCoreDataManager.shared.deleteObject(object: competitorCheckIn) - RegattaCoreDataManager.shared.saveContext() + coreDataManager.deleteObject(object: competitorCheckIn) + coreDataManager.saveContext() self.navigationController!.popViewController(animated: true) } diff --git a/ios/SAPTracker/src/xcode/SAPTracker/CoreDataManager.swift b/ios/SAPTracker/src/xcode/SAPTracker/CoreDataManager.swift index dc4d608892f..bb055cae3e6 100644 --- a/ios/SAPTracker/src/xcode/SAPTracker/CoreDataManager.swift +++ b/ios/SAPTracker/src/xcode/SAPTracker/CoreDataManager.swift @@ -120,13 +120,15 @@ class CoreDataManager: NSObject { func newCompetitorCheckIn() -> CompetitorCheckIn { let checkIn = NSEntityDescription.insertNewObject(forEntityName: Entities.CompetitorCheckIn.rawValue, into: managedObjectContext) as! CompetitorCheckIn - checkIn.initialize() + checkIn.event = newEvent(checkIn: checkIn) + checkIn.leaderboard = newLeaderboard(checkIn: checkIn) return checkIn } func newMarkCheckIn() -> MarkCheckIn { let checkIn = NSEntityDescription.insertNewObject(forEntityName: Entities.MarkCheckIn.rawValue, into: managedObjectContext) as! MarkCheckIn - checkIn.initialize() + checkIn.event = newEvent(checkIn: checkIn) + checkIn.leaderboard = newLeaderboard(checkIn: checkIn) return checkIn } diff --git a/ios/SAPTracker/src/xcode/SAPTracker/GPSFixController.swift b/ios/SAPTracker/src/xcode/SAPTracker/GPSFixController.swift index 23f3e0a4ed0..5d389e24ad3 100644 --- a/ios/SAPTracker/src/xcode/SAPTracker/GPSFixController.swift +++ b/ios/SAPTracker/src/xcode/SAPTracker/GPSFixController.swift @@ -40,9 +40,11 @@ class GPSFixController: NSObject { } weak var checkIn: CheckIn! + weak var coreDataManager: CoreDataManager! - init(checkIn: CheckIn) { + init(checkIn: CheckIn, coreDataManager: CoreDataManager) { self.checkIn = checkIn + self.coreDataManager = coreDataManager } // MARK: - Send All @@ -127,8 +129,8 @@ class GPSFixController: NSObject { DispatchQueue.main.async(execute: { self.log(info: "Sending \(gpsFixes.count) GPS fixes was successful") self.postModeChangedNotification(mode: BatteryManager.sharedManager.batterySaving ? .BatterySaving : .Online) - RegattaCoreDataManager.shared.deleteObjects(objects: gpsFixes) - RegattaCoreDataManager.shared.saveContext() + self.coreDataManager.deleteObjects(objects: gpsFixes) + self.coreDataManager.saveContext() self.log(info: "\(gpsFixes.count) GPS fixes deleted") success(gpsFixesLeft) }) diff --git a/ios/SAPTracker/src/xcode/SAPTracker/HomeViewController.swift b/ios/SAPTracker/src/xcode/SAPTracker/HomeViewController.swift index d3433b9a8ca..fbe87019984 100755 --- a/ios/SAPTracker/src/xcode/SAPTracker/HomeViewController.swift +++ b/ios/SAPTracker/src/xcode/SAPTracker/HomeViewController.swift @@ -198,7 +198,7 @@ class HomeViewController: UIViewController { fileprivate func reviewGPSFixes(checkIns: [CheckIn], completion: @escaping () -> Void) { guard checkIns.count > 0 else { completion(); return } - let gpsFixController = GPSFixController.init(checkIn: checkIns[0]) + let gpsFixController = GPSFixController.init(checkIn: checkIns[0], coreDataManager: RegattaCoreDataManager.shared) gpsFixController.sendAll(completion: { (withSuccess) in self.reviewGPSFixes(checkIns: Array(checkIns[1..