forked from zelo72/mastodon-ios
fix: pick server scene leaking issue
This commit is contained in:
parent
0ddf9d8abe
commit
2ce5c4db6b
|
@ -16,7 +16,8 @@ extension CategoryPickerSection {
|
||||||
for collectionView: UICollectionView,
|
for collectionView: UICollectionView,
|
||||||
dependency: NeedsDependency
|
dependency: NeedsDependency
|
||||||
) -> UICollectionViewDiffableDataSource<CategoryPickerSection, CategoryPickerItem> {
|
) -> UICollectionViewDiffableDataSource<CategoryPickerSection, CategoryPickerItem> {
|
||||||
UICollectionViewDiffableDataSource(collectionView: collectionView) { collectionView, indexPath, item -> UICollectionViewCell? in
|
UICollectionViewDiffableDataSource(collectionView: collectionView) { [weak dependency] collectionView, indexPath, item -> UICollectionViewCell? in
|
||||||
|
guard let _ = dependency else { return nil }
|
||||||
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: String(describing: PickServerCategoryCollectionViewCell.self), for: indexPath) as! PickServerCategoryCollectionViewCell
|
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: String(describing: PickServerCategoryCollectionViewCell.self), for: indexPath) as! PickServerCategoryCollectionViewCell
|
||||||
switch item {
|
switch item {
|
||||||
case .all:
|
case .all:
|
||||||
|
|
|
@ -17,7 +17,8 @@ extension CustomEmojiPickerSection {
|
||||||
for collectionView: UICollectionView,
|
for collectionView: UICollectionView,
|
||||||
dependency: NeedsDependency
|
dependency: NeedsDependency
|
||||||
) -> UICollectionViewDiffableDataSource<CustomEmojiPickerSection, CustomEmojiPickerItem> {
|
) -> UICollectionViewDiffableDataSource<CustomEmojiPickerSection, CustomEmojiPickerItem> {
|
||||||
let dataSource = UICollectionViewDiffableDataSource<CustomEmojiPickerSection, CustomEmojiPickerItem>(collectionView: collectionView) { collectionView, indexPath, item -> UICollectionViewCell? in
|
let dataSource = UICollectionViewDiffableDataSource<CustomEmojiPickerSection, CustomEmojiPickerItem>(collectionView: collectionView) { [weak dependency] collectionView, indexPath, item -> UICollectionViewCell? in
|
||||||
|
guard let _ = dependency else { return nil }
|
||||||
switch item {
|
switch item {
|
||||||
case .emoji(let attribute):
|
case .emoji(let attribute):
|
||||||
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: String(describing: CustomEmojiPickerItemCollectionViewCell.self), for: indexPath) as! CustomEmojiPickerItemCollectionViewCell
|
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: String(describing: CustomEmojiPickerItemCollectionViewCell.self), for: indexPath) as! CustomEmojiPickerItemCollectionViewCell
|
||||||
|
|
|
@ -25,7 +25,13 @@ extension PickServerSection {
|
||||||
pickServerSearchCellDelegate: PickServerSearchCellDelegate,
|
pickServerSearchCellDelegate: PickServerSearchCellDelegate,
|
||||||
pickServerCellDelegate: PickServerCellDelegate
|
pickServerCellDelegate: PickServerCellDelegate
|
||||||
) -> UITableViewDiffableDataSource<PickServerSection, PickServerItem> {
|
) -> UITableViewDiffableDataSource<PickServerSection, PickServerItem> {
|
||||||
UITableViewDiffableDataSource(tableView: tableView) { [weak pickServerCategoriesCellDelegate, weak pickServerSearchCellDelegate, weak pickServerCellDelegate] tableView, indexPath, item -> UITableViewCell? in
|
UITableViewDiffableDataSource(tableView: tableView) { [
|
||||||
|
weak dependency,
|
||||||
|
weak pickServerCategoriesCellDelegate,
|
||||||
|
weak pickServerSearchCellDelegate,
|
||||||
|
weak pickServerCellDelegate
|
||||||
|
] tableView, indexPath, item -> UITableViewCell? in
|
||||||
|
guard let dependency = dependency else { return nil }
|
||||||
switch item {
|
switch item {
|
||||||
case .header:
|
case .header:
|
||||||
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: PickServerTitleCell.self), for: indexPath) as! PickServerTitleCell
|
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: PickServerTitleCell.self), for: indexPath) as! PickServerTitleCell
|
||||||
|
|
|
@ -21,6 +21,10 @@ extension HomeTimelineViewController {
|
||||||
children: [
|
children: [
|
||||||
moveMenu,
|
moveMenu,
|
||||||
dropMenu,
|
dropMenu,
|
||||||
|
UIAction(title: "Show Welcome", image: UIImage(systemName: "figure.walk"), attributes: []) { [weak self] action in
|
||||||
|
guard let self = self else { return }
|
||||||
|
self.showWelcomeAction(action)
|
||||||
|
},
|
||||||
UIAction(title: "Show Public Timeline", image: UIImage(systemName: "list.dash"), attributes: []) { [weak self] action in
|
UIAction(title: "Show Public Timeline", image: UIImage(systemName: "list.dash"), attributes: []) { [weak self] action in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
self.showPublicTimelineAction(action)
|
self.showPublicTimelineAction(action)
|
||||||
|
@ -277,6 +281,10 @@ extension HomeTimelineViewController {
|
||||||
.store(in: &disposeBag)
|
.store(in: &disposeBag)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc private func showWelcomeAction(_ sender: UIAction) {
|
||||||
|
coordinator.present(scene: .welcome, from: self, transition: .modal(animated: true, completion: nil))
|
||||||
|
}
|
||||||
|
|
||||||
@objc private func showPublicTimelineAction(_ sender: UIAction) {
|
@objc private func showPublicTimelineAction(_ sender: UIAction) {
|
||||||
coordinator.present(scene: .publicTimeline, from: self, transition: .show)
|
coordinator.present(scene: .publicTimeline, from: self, transition: .show)
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,6 +67,17 @@ extension MastodonPickServerViewController {
|
||||||
setupOnboardingAppearance()
|
setupOnboardingAppearance()
|
||||||
defer { setupNavigationBarBackgroundView() }
|
defer { setupNavigationBarBackgroundView() }
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(systemName: "ellipsis.circle"), style: .plain, target: nil, action: nil)
|
||||||
|
let children: [UIMenuElement] = [
|
||||||
|
UIAction(title: "Dismiss", image: nil, identifier: nil, discoverabilityTitle: nil, attributes: [], state: .off, handler: { [weak self] _ in
|
||||||
|
guard let self = self else { return }
|
||||||
|
self.dismiss(animated: true, completion: nil)
|
||||||
|
})
|
||||||
|
]
|
||||||
|
navigationItem.rightBarButtonItem?.menu = UIMenu(title: "Debug Tool", image: nil, identifier: nil, options: [], children: children)
|
||||||
|
#endif
|
||||||
|
|
||||||
view.addSubview(nextStepButton)
|
view.addSubview(nextStepButton)
|
||||||
NSLayoutConstraint.activate([
|
NSLayoutConstraint.activate([
|
||||||
nextStepButton.leadingAnchor.constraint(equalTo: view.readableContentGuide.leadingAnchor, constant: MastodonPickServerViewController.actionButtonMargin),
|
nextStepButton.leadingAnchor.constraint(equalTo: view.readableContentGuide.leadingAnchor, constant: MastodonPickServerViewController.actionButtonMargin),
|
||||||
|
|
|
@ -75,6 +75,14 @@ class MastodonPickServerViewModel: NSObject {
|
||||||
configure()
|
configure()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
extension MastodonPickServerViewModel {
|
||||||
|
|
||||||
private func configure() {
|
private func configure() {
|
||||||
Publishers.CombineLatest(
|
Publishers.CombineLatest(
|
||||||
filteredIndexedServers.eraseToAnyPublisher(),
|
filteredIndexedServers.eraseToAnyPublisher(),
|
||||||
|
|
Loading…
Reference in New Issue