Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fix] #165 - isEditMode 버튼 토글 및 activityRecordList 초기화 문제 해결 #166

Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ final class RNAlertVC: UIViewController {
// MARK: - Properties

var rightButtonTapAction: (() -> Void)?

var deleteRecordDelegate: deleteRecordDelegate?

// MARK: - UI Components
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ extension ActivityRecordInfoVC {

extension ActivityRecordInfoVC {
func wantsToDelete() {
self.deleteRecordList = [Int]()

print("삭제 실행")

guard let selectedRecords = activityRecordTableView.indexPathsForSelectedRows else { return }
Expand All @@ -135,6 +137,7 @@ extension ActivityRecordInfoVC {
self.deleteRecordList.append(activityRecordList[indexPath.row].id)
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

self.deleteRecordList = selectedRecords.map { activityRecordList[$0].id }

이렇게 for ~ in 대신에 고차함수를 사용해 깔끔하게 작성하는 방법도 있습니다. 성능은 동일해요!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

와아!!! 감사합니다


self.isEditMode.toggle()
deleteRecord()
}
}
Expand All @@ -143,6 +146,7 @@ extension ActivityRecordInfoVC {

extension ActivityRecordInfoVC {
@objc func editButtonDidTap() {
print(isEditMode)
if isEditMode {
self.totalNumOfRecordlabel.text = "총 기록 \(self.activityRecordList.count)개"
self.editButton.setTitle("편집", for: .normal)
Expand All @@ -168,6 +172,9 @@ extension ActivityRecordInfoVC {
self.present(deleteAlertVC, animated: false, completion: nil)
deleteAlertVC.rightButtonTapAction = { [weak self] in
deleteAlertVC.dismiss(animated: false)
let activityRecordInfoVC = ActivityRecordInfoVC()
activityRecordInfoVC.isEditMode = false
return
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

171줄 보면 deleteAlertVC에서 버튼 터치 액션을 지정해주고자 delegate도 사용하고 있고 여기에서는 클로저도 사용해서 2중으로 지정해주고 있네요
하나로 통일해야 할 것 같습니다.. 가능하면 delegate는 제거하고 이 클로저에서 삭제하는 함수 실행을 넣으면 될 것 같아요!

그리고! 지금처럼

 let activityRecordInfoVC = ActivityRecordInfoVC()
 activityRecordInfoVC.isEditMode = false

이렇게 하면 아예 새로운 ActivityRecordInfoVC를 만들고 그 뷰의 edit모드를 설정하는 거라 현재 사용자가 보고 있는 ActivityRecordInfoVC에는 아무런 영향이 없을거에요
그냥 저거 대신에 self?.isEditMode = false로 직접 현재 인스턴스의 프로퍼티를 변경하면 되지 않을까요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 클로저 안에서 현재 VC에 접근하려면 그냥 self?.하면 되는 거였군요....... 감사합니다

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네 맞아요!
그래서 delegate와 클로저를 같은 용도로 사용할 수 있는거에요!
하위 뷰에서 동작할 작업을 부모 뷰(self)에서 지정해준다는 점이 핵심인거죠!

하지만 이렇게 클로저로 self를 넣을 수 있다는 점으로 인해 발생하는 문제가 바로 retain Cycle이고 ARC와 연관이 있습니다.
이 부분은 정말 중요하니 별도로 공부해보면 좋을거에요!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아!! 그랫군요 이해햇습니다 !! 그 부분 공부해볼게요!!

}
}
}
Expand Down