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?.searchableKeyPaths = [#keyPath(Game.name)]
self.searchController?.searchHandler = { [weak searchController, weak searchResultsController] (searchValue, _) in
if searchController?.searchBar.text?.isEmpty == false
self.searchController?.searchHandler = { [weak self, weak searchResultsController] (searchValue, _) in
guard let self = self else { return nil }
if self.searchController?.searchBar.text?.isEmpty == false
{
self.pageViewController.view.isHidden = true
}

View File

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

View File

@ -132,7 +132,7 @@ private extension RecordVersionsViewController
let localVersionsDataSource = RSTDynamicTableViewDataSource<Version>()
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
guard let `self` = self else { return }
@ -157,7 +157,7 @@ private extension RecordVersionsViewController
let loadingDataSource = RSTDynamicTableViewDataSource<Version>()
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.cellConfigurationHandler = { (_, _, _) in }

View File

@ -66,12 +66,12 @@ private extension SyncStatusViewController
let fetchedDataSource = RSTFetchedResultsTableViewDataSource(fetchedResultsController: fetchedResultsController)
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
cell.textLabel?.text = game.name
cell.textLabel?.numberOfLines = 0
if let gameConflictsCount = self.gameConflictsCount
if let gameConflictsCount = self?.gameConflictsCount
{
if let count = gameConflictsCount[game.objectID.uriRepresentation()], count > 0
{