Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

iOS 개발일지

0828 새싹 8주차 마무리 본문

SeSAC iOS 데뷔과정 2기

0828 새싹 8주차 마무리

Lia's iOS 2022. 8. 28. 16:30
iOS 앱 개발자 데뷔 과정 8주차 마무리

 

 

 

 

- Diary App

- 다이어리 앱 마무리 진행

 

- 3개의 탭 (달력, 검색, 설정) 으로 이루어진 탭바 컨트롤러로 앱 구성

검색 화면의 테이블뷰는 달력 화면 하단의 테이블뷰와 셀의 구성이 같기 때문에, 따로 파일을 만들지 않고 그대로 가져와 사용했다.

탭바를 구현하기 위해 우선 탭바 컨트롤러를 만들고, 탭바로 보여줄 뷰컨트롤러를 설정했다.

class TabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        configureTabBarController()
    }

    func configureTabBarController() {
        let firstVC = HomeViewController()
        let firstNav = UINavigationController(rootViewController: firstVC)
        let secondVC = SearchViewController()
        let thirdVC = SettingViewController()
        
        firstNav.tabBarItem = UITabBarItem(title: "달력", image: UIImage(systemName: "calendar.circle"), selectedImage: UIImage(systemName: "calendar.circle.fill"))
        secondVC.tabBarItem = UITabBarItem(title: "검색", image: UIImage(systemName: "magnifyingglass.circle"), selectedImage: UIImage(systemName: "magnifyingglass.circle.fill"))
        thirdVC.tabBarItem = UITabBarItem(title: "설정", image: UIImage(systemName: "gearshape.circle"), selectedImage: UIImage(systemName: "gearshape.circle.fill"))
        
        setViewControllers([firstNav, secondVC, thirdVC], animated: true)
        hidesBottomBarWhenPushed = false // 네비게이션VC로 푸쉬했을 때 밑에 바가 사라지는 것을 방지
        tabBar.tintColor = .black
    }
}

 

그리고 SceneDelegate에서 rootViewController로 설정하면 기본적인 구현이 완료된다.

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

        guard let windowScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(windowScene: windowScene)
        window?.rootViewController = TabBarController()
        window?.makeKeyAndVisible()
    }

 

 

 

- 검색 기능 구현

필터를 통해 검색을 구현하기 위해 어제 만들었던 UserDiaryRepository의 fetchFilter에 매개변수를 추가했다.

    func fetchFilter(text: String) -> Results<UserDiary>! {
        return localRealm.objects(UserDiary.self).filter("diaryTitle CONTAINS[c] '\(text)'")
    }

 

그리고 searchBarSearchButtonClicked 메서드를 통해 fetchFilter를 호출하면 완료!

extension SearchViewController: UISearchBarDelegate {
    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        if let text = searchBar.text, text != "" {
            tasks = repository.fetchFilter(text: text)
        }
    }
}

 

 

 

- 테이블뷰로 백업 파일 보여주고, 셀 선택하면 바로 백업하기

형식은 갖춰졌고 기능도 동작하긴 하지만, 지금 데이터보다 더 작은 갯수로 백업이 진행될 경우 런타임 에러가 발생한다.

그렇지 않을 경우에도 바로바로 반영이 되지 않는 문제가 있어 더 고민해봐야 할 것 같다.

 

 

 

 

# 그 외

시뮬레이터 기기가 다를 경우 realm 데이터가 따로 저장된다...!

갑자기 기존 데이터가 사라지고, 제대로 코드 반영이 되지 않아 난감했는데 파일 위치가 다르기 때문이었다.