Saturday, March 26, 2011

iphone 개발 수업 3주차-2

3/26
<UITable view>
같은 형태의 데이터를 list 형태로 반복해서 출력. MVC로 구성
섹션: 리스트에서 그룹
섹션 헤더 : 섹션의 이름
섹션 푸터 : 섹션 마지막의 메뉴같은것(?)
셀 : 그룹을 이루는 하나 하나의 항목; contentView


UITableView : MVC 에서 view의 역할


UITableViewDataSource : MVC 에서 model의 역할, 데이터 관리
-(NSInteger)numberOfSectionInTableView:(UITableView *)TableView ; 섹션(group)의 수를 return(섹션이 없을때 return 값은 1)
-(NSInteger)tableView:(UITableView *)TableView numberOfRowsInSection:(NSInteger*)section;
-(UITableViewCell *)tableView:(UITableView *)TableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
UITableViewDataSource 에서는 위의 3 메소드를 반드시 정의해줘야 한다.


UITableViewDelegate : controller의 역할, 이벤트 관리


MainWindow 객체 안에 UITableView가 있고 MainWindow화면을 관리하는 UIViewController 객체가 UITableView 의 내용을 알기 위해 UITableViewDataSource의 메소드들을 호출하는데 먼저 numberOfSectionInTableView를 호출해서 섹션의 갯수를 알아냄, 그 다음에 tableView를 호출해서 섹션하나에 몇개의 셀이 있는지 알아냄(섹션 갯수만큼 호출). 그 뒤 UITableViewDataSource 를 호출해서 셀의 내용을 받는다(한 화면에 보여줄 셀 갯수만큼 호출).  
---------------------------------------------------------------------------------------------------


< Navigation based application in SimpleHumanResource Architecture (SimpleHumanResource 라는 프로젝트로 Navigation based application 의 architecture를 알아보자) >
1.SimpleHumanResourceAppDelegate 안에 시스템 이벤트 처리 메소드와 아래의 것들이 있다.
UIwindow *window;  MainWindow관리(title, frame등)
UINavigationController *navigationController; MainWindow내용 전환(UIViewController들을 전환)


2.RootViewController ; 첫화면으로 이는 UIViewController, UITableViewDataSource(내용관리를 위한 프로토콜), UITableViewDelegate(이벤트를 위한 프로토콜)를 상속받은 UITableViewController을 상속받음. 즉 화면 내용, UITableView의 내용, 이벤트를 다 관리(이것은 첫화면을 UITableView를 나타내기 위해서 UITableView와 관련된 것들을 상속 받았는데, 그게 싫다면 그냥 UIViewController만 상속 받으면 된다).


3.만약 또 다른 화면을 만들고 싶다면 2번에서처럼  UIViewController를 상속받은 클래스를 만들면 된다.


2번 3번에서 만든 여러개의 화면이 공유하는 데이터나 내용은 1번의 SimpleHumanResourceAppDelegate에 넣으면 된다. [[UIApplication SharedApplication] delegate]를 사용하면 공유 정보리스트 중 SimpleHumanResourceAppDelegate를 리턴하게 된다.


UIViewController에는 IBOutlet UIView * view를 속성을 가지고 있다. UITableViewController는 IBOulet UITableView* tableView 를 가지고 있다. 그렇기 때문에 RootViewController는 이 속성을 자동으로 가지게 된다.




Outlet과 ReferenceOutlet의 차이는? Referencing Outlet 이 주소값을 받을 속성들.
----------------------------------------------------------------------------------------------------


<JSON>
서버나 클라이언트가 각각 구성된 언어가 다르기 때문에 특정 객체를 넘겨줄때 사용하는 것으로 원래는 xml을 사용했는데 xml 이 복잡하기에 JSON을 웹에서 많이 사용한다.
예를 들어 서버는 python으로 개발이 됐는데 client 는 objective-c로 된 어플을 사용중이라면 데이터 교환을 위한 통일된 형태가 필요하다. 이럴 때 사용되는 데이터 교환의 표준이 xml. 
그러면 xml을 개발자들이 잘 안쓰는 이유? xml 파싱하기가 쉽지 않아서
그래서 표준은 아직 아니지만 형식을 가진 문자열인 JSON 을 많이 사용한다. 이렇게 JSON 문자열로 서버에서 클라이언트로 데이터를 보낸다.
http://www.json.org/