Fixes various memory leaks

This commit is contained in:
Riley Testut 2019-02-25 17:04:30 -08:00
parent 6b8414ccdc
commit 2c0709fa38
4 changed files with 14 additions and 12 deletions

View File

@ -170,8 +170,10 @@ private extension GamesViewController
self.searchController = RSTSearchController(searchResultsController: searchResultsController) self.searchController = RSTSearchController(searchResultsController: searchResultsController)
self.searchController?.searchableKeyPaths = [#keyPath(Game.name)] self.searchController?.searchableKeyPaths = [#keyPath(Game.name)]
self.searchController?.searchHandler = { [weak searchController, weak searchResultsController] (searchValue, _) in self.searchController?.searchHandler = { [weak self, weak searchResultsController] (searchValue, _) in
if searchController?.searchBar.text?.isEmpty == false guard let self = self else { return nil }
if self.searchController?.searchBar.text?.isEmpty == false
{ {
self.pageViewController.view.isHidden = true self.pageViewController.view.isHidden = true
} }

View File

@ -73,9 +73,9 @@ private extension GameSyncStatusViewController
{ {
private func makeDataSource() -> RSTCompositeTableViewDataSource<NSManagedObject> private func makeDataSource() -> RSTCompositeTableViewDataSource<NSManagedObject>
{ {
func configure(_ cell: UITableViewCell, recordedObject: NSManagedObject) // Use closure instead of local function to allow us to capture `self` weakly.
{ let configure = { [weak self] (cell: UITableViewCell, recordedObject: NSManagedObject) in
if let record = self.recordsByObjectURI[recordedObject.objectID.uriRepresentation()], record.isConflicted if let record = self?.recordsByObjectURI[recordedObject.objectID.uriRepresentation()], record.isConflicted
{ {
cell.textLabel?.textColor = .red cell.textLabel?.textColor = .red
} }
@ -96,7 +96,7 @@ private extension GameSyncStatusViewController
cell.textLabel?.text = NSLocalizedString("Game Save", comment: "") cell.textLabel?.text = NSLocalizedString("Game Save", comment: "")
} }
configure(cell, recordedObject: item) configure(cell, item)
} }
let saveStatesFetchRequest = SaveState.fetchRequest() as NSFetchRequest<SaveState> let saveStatesFetchRequest = SaveState.fetchRequest() as NSFetchRequest<SaveState>
@ -109,7 +109,7 @@ private extension GameSyncStatusViewController
let saveStatesDataSource = RSTFetchedResultsTableViewDataSource(fetchRequest: saveStatesFetchRequest, managedObjectContext: DatabaseManager.shared.viewContext) let saveStatesDataSource = RSTFetchedResultsTableViewDataSource(fetchRequest: saveStatesFetchRequest, managedObjectContext: DatabaseManager.shared.viewContext)
saveStatesDataSource.cellConfigurationHandler = { (cell, saveState, indexPath) in saveStatesDataSource.cellConfigurationHandler = { (cell, saveState, indexPath) in
cell.textLabel?.text = saveState.localizedName cell.textLabel?.text = saveState.localizedName
configure(cell, recordedObject: saveState) configure(cell, saveState)
} }
let cheatsFetchRequest = Cheat.fetchRequest() as NSFetchRequest<Cheat> let cheatsFetchRequest = Cheat.fetchRequest() as NSFetchRequest<Cheat>
@ -120,7 +120,7 @@ private extension GameSyncStatusViewController
cheatsDataSource.cellConfigurationHandler = { (cell, cheat, indexPath) in cheatsDataSource.cellConfigurationHandler = { (cell, cheat, indexPath) in
cell.textLabel?.text = cheat.name cell.textLabel?.text = cheat.name
configure(cell, recordedObject: cheat) configure(cell, cheat)
} }
let dataSources = [gameDataSource, saveStatesDataSource, cheatsDataSource] as! [RSTArrayTableViewDataSource<NSManagedObject>] let dataSources = [gameDataSource, saveStatesDataSource, cheatsDataSource] as! [RSTArrayTableViewDataSource<NSManagedObject>]

View File

@ -132,7 +132,7 @@ private extension RecordVersionsViewController
let localVersionsDataSource = RSTDynamicTableViewDataSource<Version>() let localVersionsDataSource = RSTDynamicTableViewDataSource<Version>()
localVersionsDataSource.numberOfSectionsHandler = { 1 } localVersionsDataSource.numberOfSectionsHandler = { 1 }
localVersionsDataSource.numberOfItemsHandler = { _ in self.record.localModificationDate != nil ? 1 : 0 } localVersionsDataSource.numberOfItemsHandler = { [weak self] _ in self?.record.localModificationDate != nil ? 1 : 0 }
localVersionsDataSource.cellConfigurationHandler = { [weak self] (cell, _, indexPath) in localVersionsDataSource.cellConfigurationHandler = { [weak self] (cell, _, indexPath) in
guard let `self` = self else { return } guard let `self` = self else { return }
@ -157,7 +157,7 @@ private extension RecordVersionsViewController
let loadingDataSource = RSTDynamicTableViewDataSource<Version>() let loadingDataSource = RSTDynamicTableViewDataSource<Version>()
loadingDataSource.numberOfSectionsHandler = { 1 } loadingDataSource.numberOfSectionsHandler = { 1 }
loadingDataSource.numberOfItemsHandler = { _ in (self.versions == nil) ? 1 : 0 } loadingDataSource.numberOfItemsHandler = { [weak self] _ in (self?.versions == nil) ? 1 : 0 }
loadingDataSource.cellIdentifierHandler = { _ in "LoadingCell" } loadingDataSource.cellIdentifierHandler = { _ in "LoadingCell" }
loadingDataSource.cellConfigurationHandler = { (_, _, _) in } loadingDataSource.cellConfigurationHandler = { (_, _, _) in }

View File

@ -66,12 +66,12 @@ private extension SyncStatusViewController
let fetchedDataSource = RSTFetchedResultsTableViewDataSource(fetchedResultsController: fetchedResultsController) let fetchedDataSource = RSTFetchedResultsTableViewDataSource(fetchedResultsController: fetchedResultsController)
fetchedDataSource.searchController.searchableKeyPaths = [#keyPath(Game.name)] fetchedDataSource.searchController.searchableKeyPaths = [#keyPath(Game.name)]
fetchedDataSource.cellConfigurationHandler = { (cell, game, indexPath) in fetchedDataSource.cellConfigurationHandler = { [weak self] (cell, game, indexPath) in
let cell = cell as! BadgedTableViewCell let cell = cell as! BadgedTableViewCell
cell.textLabel?.text = game.name cell.textLabel?.text = game.name
cell.textLabel?.numberOfLines = 0 cell.textLabel?.numberOfLines = 0
if let gameConflictsCount = self.gameConflictsCount if let gameConflictsCount = self?.gameConflictsCount
{ {
if let count = gameConflictsCount[game.objectID.uriRepresentation()], count > 0 if let count = gameConflictsCount[game.objectID.uriRepresentation()], count > 0
{ {