포스트

킥보드 프로젝트 7일차

최종점검

이것저것 테스트를하며 혹시나 생각하지 못했던 예외상황이 없는지 확인을 해보았다.

아니나 다를까 예외 상황은 발생했다.

1. 반납할때 코어데이터에 등록이 되지않았던 문제 수정

테스트를 하다가 뭔가 이상해서 보니 반납할때 킥보드의 위치가 그냥 싱글턴 배열에먼 저장이 되고 코어데이터에는 저장이 되지 않는 문제를 확인했다.

우선 반납할때 핀의 시리얼 번호를 사용을 해야겠다고 생각을 했다.

그래서 Predicate를 사용했다.

이때 로직은 괜찮은데 자꾸 에러가 발생했는데 알고보니

let predicate = NSPredicate(format: "id == %@", slicedSerial) 현재는 slicedSerial로 되어있지만 이전에는 serial로 해버렸다.

저기에 있는 serial은 title을 그대로 받아오기에 기기번호: 라는 문자열이 같이 넘어오게된다.

무튼 문제점을 수정하여 코어데이터에 반여이 되게 수정을 했다.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 @IBAction func returnScooterBtn(_ sender: UIButton) {
        DispatchQueue.global().async {
            if CLLocationManager.locationServicesEnabled() {
                self.locationManager.requestWhenInUseAuthorization()
                let currentLocation = self.locationManager.location
                
                let serial = self.serialNumber
                let slicedSerial = String(serial.suffix(10))
                self.addMark(coordinate: CLLocationCoordinate2D(latitude: currentLocation?.coordinate.latitude ?? 37.503702192, longitude: currentLocation?.coordinate.longitude ?? 127.025313873406), serial: slicedSerial)
                //self.makingDummy()
                self.locations.append(currentLocation!.coordinate)
                
                do { //new
                    let predicate = NSPredicate(format: "id == %@", slicedSerial)
                    self.request.predicate = predicate
                    request.predicate = predicate
                    SavedPinSingleton.shared.array.removeAll()
                    SavedPinSingleton.shared.array = try self.context.fetch(requestForPredicate)
                    
                    if SavedPinSingleton.shared.array.count != 0 {
                        
                        let filteredObject = SavedPinSingleton.shared.array[0]
                        filteredObject.setValue((currentLocation?.coordinate.longitude ?? 37.503702192), forKey: "x")
                        filteredObject.setValue((currentLocation?.coordinate.latitude ?? 37.503702192), forKey: "y")
                        
                        do {
                            try self.context.save()
                        } catch {
                            let alert = UIAlertController(title: "에러 발생", message: "데이터 저장 중 오류가 발생했습니다.", preferredStyle: .alert)
                            alert.addAction(UIAlertAction(title: "확인", style: .default))
                            self.present(alert, animated: true)
                        }
                    }
                    
                    
                } catch {
                    let alert = UIAlertController(title: "에러 발생", message: "데이터 저장 중 오류가 발생했습니다.", preferredStyle: .alert)
                    alert.addAction(UIAlertAction(title: "확인", style: .default))
                    self.present(alert, animated: true)
                }
                self.getDummy()
                self.makingDummy()
            }
            
        }
        isUsed = false
        setbuttonHidden(isStatus: isUsed)
        
        let alert = UIAlertController(title: "반납완료", message: "킥보드 반납이 완료되었습니다.\n안녕히 가세요.", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "확인", style: .default))
        self.present(alert, animated: true)
        let distance = calculateTripDistance()
        let finTime = dateFormatter.string(from: Date())
        RecordSingleton.shared.array.append(RecordModel(distance: distance, time: finTime))
        locations.removeAll() // 거리 계산후 배열 초기화.
        
    }

2. 반납하고 다른 탭을 갔다가 다시 지도로 넘어왔을때 반납한 스쿠더만 보이던 문제 해결

테스트를 다시 하던중 해당 문제를 발견하고 급하게 핫픽스를 하였다.

request를 같은걸 사용하기에 발생한 문제였다.

그래서 predicate 전용 리퀘스트를 만들어 주었다.

1
2
3
let requestForPredicate: NSFetchRequest<PinData> = PinData.fetchRequest()
let predicate = NSPredicate(format: "id == %@", slicedSerial)
requestForPredicate.predicate = predicate

문제 해결.

물론 이것외에도 일주일간 여러 예외상황이 있었고, 최대한 해결을 했지만 기억이 나지않아서 여기까지 글을 작성하도록 하겠다.

일주일간 짧은 프로젝트였지만 팀원들과 많은걸 이루어내었기에 후회없는 프로젝트였다.

개인 후기.

이번에는 저번과 다르게 모두 처음 뵙는 분들과 함께 했지만, 지난 팀프로젝트와 마찬가지로, 뭔가 프로젝트 자체가 엄청 재미있게 될것같다고 생각이 들었는데, 역시나 팀분위기가 쳐지는것 없이 너무 재미있게 했다.

그러다보니 나도 더 열심히 해서 팀원들의 기대에 부응을 하려고 노력을 하다보니, 제발 그만 좀 하라고 할정도로 열심히한 것 같다.

지난번에 지도를 아주 잠깐 썼지만, 이번에 지도를 제대로 쓰면서 어떻게 써야할지 좋은 공부가 되었다.

물론 시간때문에 더 구현하고 싶었지만 못했던것도 있다.

이부분은 나중에 팀원분들의 동의를 얻어 개조를 하려고 한다. 물론 지난번 키오스크도 아직 개조를 못한상태…

아마 이 모든 과정이 끝나고 개조를 하지 않을까 싶기도 하다.

일주일 누구한테는 길었고, 누구한테는 짧았을 시간인데, 적어도 나에겐 너무나 짧았다. 그만큼 너무 재미있어서 시간가는줄 몰랐던것 같다.

아직도 공부할게 많지만, 이번 프로젝트에서 너무 좋은 에너지를 받았기에 그걸 바탕으로 더 열심히 해야겠다는 생각도 든다.

생각나는 후기는 여기까지 추가로 더 쓰도록 하겠다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.