Skip to content

Z_4. RouteDataManager Random Data Generate

jeonghyeon Hwang edited this page Nov 27, 2022 · 6 revisions

RouteDataManager에 Random Data를 생성하기 위한 방법

단, 해당 가이드에서는 PointInformation을 빈 배열로 생성합니다.

  1. Date Random Generate를 위한 메소드 추가
// https://gist.github.com/nbasham/c219d8c8c773d2c146c526dfccb4353b
extension Date {
    static func randomBetween(start: Date, end: Date) -> Date {
        var date1 = start
        var date2 = end
        if date2 < date1 {
            let temp = date1
            date1 = date2
            date2 = temp
        }
        let span = TimeInterval.random(in: date1.timeIntervalSinceNow...date2.timeIntervalSinceNow)
        return Date(timeIntervalSinceNow: span)
    }
}
  1. RouteDataManager.swift에 아래의 두 메소드를 추가
func randomRouteGenerate(for num: Int) {
        
        let randomGymNameList: [String] = ["클라이밍 Alpha", "Beta 클라이밍", "C 클라임", "Grand Climb"]
        let randomBool: [Bool] = [true, false]
        
        for _ in 0..<num {
            let randomDate = Date.randomBetween(start: Date(timeIntervalSince1970: 0), end: Date(timeIntervalSince1970: 300000))
            let randomGymName = randomGymNameList[Int.random(in: 0..<randomGymNameList.count)]
            let randomProblemLevel = Int.random(in: 0...9)
            let randomBool = randomBool[Int.random(in: 0..<1)]
            let pageGenerateNum = Int.random(in: 1..<5)
            let pageInfoList: [PageInfo] = randomPageListGenerate(for: pageGenerateNum)
            let routeInfo = RouteInfo(imageLocalIdentifier: "", dataWrittenDate: randomDate, gymName: randomGymName, problemLevel: randomProblemLevel, isChallengeComplete: randomBool, pages: pageInfoList)
            
            coreDataDAO.createRouteInformationData(routeInfo: routeInfo)
        }
        saveData()
    }
    
    func randomPageListGenerate(for num: Int) -> [PageInfo]{
        var pageList: [PageInfo] = []
        for i in 0..<num {
            pageList.append(PageInfo(rowOrder: i, points: []))
        }
        return pageList
    }
  1. RouteDataManager.swift의 init부에서 아래의 순서대로 메소드를 호출
    coreDataDAO = RouteCoreDataDAO() // 기존 코드
    randomRouteGenerate(for: 10) // 추가된 코드, 인자를 변경하여 생성할 RouteInformation 데이터 수 변경이 가능하다.
    updateRepository() // 기존 코드
  • 단, 동일한 데이터를 동일한 상태 그대로 유지하고 싶은 경우, randomRouteGenerate 메소드는 1회만 호출한다.
  • 단, 매번 다른 데이터를 받고싶은 경우, 아래의 형태로 RouteDataManager.swift의 init부를 수정한다.
    coreDataDAO = RouteCoreDataDAO() // 기존 코드
    deleteAllData()
    randomRouteGenerate(for: 10) // 추가된 코드
    updateRepository() // 기존 코드
  1. (중요)RouteFindingMainViewController에서 RouteDataManager를 호출
var routeDataManager: RouteDataManager = RouteDataManager()
var routeInfoList: [RouteInformation]!

override viewDidLoad() {
    super.viewDidLoad()
    routeInfoList = routeDataManager.getRouteFindingList()
}