스텝1. smartView.m 파일을 열고, selectPhoto: 메소드를 다음과 같이 수정합니다.
소스라인 386~400 : 다운받을 이미지 데이터가 있고 아직 CoreData에 이를 다운받아 저장하지 않았을 때만 다운로드 로직을 실행하는 조건문입니다.
소스라인 388 : 서버와 통신을 수행하는 동안 사용자가 로딩표시를 볼 수 있게 합니다.
소스라인 389 : 다음에서 작성할 loadReportImage 메소드를 백그라운드 쓰레드로 실행합니다.
소스라인 390~397 : 기존에 작성했던 구문을 주석처리합니다. 이 로직은 나중에 loadReportImage 메소드로 이관해 갈 것입니다.
소스라인 398~400 : 상세이미지(report.image)가 이미 CoreData에 있을 때는 물론이고, 섬네일 이미지(report.listimage)가 없을 경우 등에도 상세 이미지를 출력하도록 로직을 구성하고 있습니다.
좀더 자세히 로직을 따져보면, 섬네일이 없을 경우는 이 메소드를 요청할 이유가 없도록 버튼을 비활성시키고 있기 때문에 섬네일 이미지가 없을 경우 고려할 필요가 없습니다.
소스라인 399 : showReportImage 메소드는 나중에 작성할 것이고, 이 메소드는 photoView 를 통해 상세 이미지를 출력할 것입니다.
소스라인 401~408 : 기존 코드를 주석처리하고 있습니다.
[break]
스텝2. 다음은 performSelectorInBackground: 에 의해 실행된 메소드입니다.
performSelectorInBackground:로 실행된느 메소드는 다음과 같이 반드시 NSAutoreleasePool 처리를 해야 합니다.
소스라인 413 : 백그라운드 쓰레드로 실행되는 메소드이므로 NSAutoreleasePool 을 호출하여 독립적인 메모리 관리를 할 수 있게 하고 있습니다.
소스라인 414 : 서버에서 포토(사진) 이미지 데이터 다운받아 CoreData에 기록합니다.
소스라인 415~419 : CoreData에 기록한 포토(사진) 이미지 데이터를 SQLite 데이터베이스 파일에 저장합니다.
소스라인 420 : 통신활성에 대한 로팅표시를 종료합니다.
소스라인 421 : 메인 쓰레드에서 showReportImage 메소드를 실행하여 포토(사진) 이미지를 화면에 출력합니다.
소스라인 422 : NSAutoreleasePool 을 종료합니다.
[break]
스텝3. 상세 이미지를 출력하는 메소드를 다음과 같이 작성합니다.
[break]
스텝4. 위에서 작성한 showReportImage 메소드를 이 클래스 안에서 호출할 수 있도록 다음과 같이 인터페이스로 선언합니다.