ios coredata로 게시판 만들기 - 로그보기
coredata 예제 마지막 부분인 로그페이지를 구현해보자. 테이블 뷰에서 데이터를 추가하거나 삭제할때 로그 데이터가 생성된다. 로그데이터는 테이블 뷰 셀의 악세서리를 클릭하면 상세페이지로 이동되면서 로그기록이 출력된다. 상세페이지도 마찬가지로 테이블 뷰로 구성되어 있다.
1.테이블뷰 생성
테이블 뷰를 생성한후 아래 그림처럼 segue로 이어준다. 그리고 테이블 뷰 기본 구성을 해준다. 테이블 뷰 기본 구성은 이 포스팅(ios TableView 예제)을 참고하자.
2.LogVC 컨트롤러 생성
위에서 만든 테이블 뷰와 매핑시켜줄 UIViewController를 상속받는 Controller를 하나 만들어준다. 그리고 위 story board에서 만든 테이블 뷰와 이어주고, 필요한 변수를 선언해 준다.
LogVC.h
@import CoreData;
#import "Log+CoreDataClass.h"
#import "Board+CoreDataClass.h"
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface LogVC : UIViewController <UITableViewDelegate, UITableViewDataSource>
//(*) 변수를 이곳에 안적어주면 외부에서 참조못한다. (!)
//(*) 외부에서 참조해야 되는 변수는 이곳에 적어주자.
//테이블 뷰
@property (strong, nonatomic) IBOutlet UITableView *tableView;
//로그 객체 배열
@property (strong,nonatomic) NSOrderedSet <Log *> * list;
//Board 객체
@property(strong,nonatomic) Board * board;
@end
NS_ASSUME_NONNULL_END
3.LogVC.m 작성
ListVC 리스트 화면에서 테이블 뷰의 악세사리 버튼을 누를때 해당 Board 객체를 LogVC 화면으로 넘겨준다. LogVC의 viewDidLoad화면에서는 받은 Board 객체에 속해 있는 Log 데이터들을 선언된 변수 list 에 할당해준다. 이 list 데이터로 테이블 뷰를 구성한다. 로직은 아래와 같다.
LogVC.m
#import "LogVC.h"
@interface LogVC ()
@end
@implementation LogVC
@synthesize tableView, list, board;
- (void)viewDidLoad {
[super viewDidLoad];
//델리게이트 설정
self.tableView.delegate = self;
self.tableView.dataSource = self;
//타이틀 설정
self.navigationController.title = self.board.title;
//Board 객체에 존재하는 logs 객체들 SET 할당.
self.list = self.board.logs;
}
//셀 개수
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.list.count;
}
//셀 구성
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
Log *log = self.list[indexPath.row];
UITableViewCell * cell = [self.tableView dequeueReusableCellWithIdentifier:@"logcell"];
NSString *strResult = [NSString stringWithFormat:@"%@ 에 %d 되었습니다." , log.regdate, log.type];
//로그 출력
cell.textLabel.text = strResult;
return cell;
}
@end
4.리스트 - 악세사리 클릭
이번에는 게시물 리스트가 있는 ListVC 테이블 뷰에서 악세사리 버튼을 눌렀을 때, 해당 행에 대한 Board 객체를 얻어서 LogVC로 전달하는 로직을 구현해보자. 그전에 storyboard 의 우측 identity 에서 LogVC의 StoryBoard ID를 설정해준다. 그리고 다시 스토리보드에서 ListVC(컨트롤러) 에서 LogVC(컨트롤러)로 Segue를 설정할때 ListVC(컨트롤러)의 root(노란색동그라미) 우클릭후 LogVC(컨트롤러)로 드래그 한 후에 팝업창에서 show를 선택해주자.
/* 악세사리 버튼 클릭했을때 */
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{
/* 1.storyboard 에서 LogVC의 identity - StoryBoard ID 설정
2. ListVC 에서 LogVC Segue 설정할때 ListVC 의 root(노란색동그라미) 우클릭후 LogVC로 드래그 -> show 선택
*/
//3.선택된 Board 객체
Board *board = self.list[indexPath.row];
//4.LogVC 객체 생성
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
LogVC *logVC = [storyBoard instantiateViewControllerWithIdentifier:@"LogVC"];
//5. LogVC에 위에서 선택한 Board 객체 변수에 대입
logVC.board = board;
//6.화면 열어주기
[self showViewController:logVC sender:self];
}
5.완성
예제파일
연재 포스팅
'아이폰 개발 > ios 개념&튜토리얼' 카테고리의 다른 글
C언어 자료형, 상수와변수, 진법표현, 함수 (0) | 2021.01.05 |
---|---|
ios HTTP POST 방식 요청 - json 타입요청 (0) | 2020.12.17 |
ios coredata로 게시판 만들기 - 수정 (0) | 2020.12.16 |
ios coredata로 게시판 만들기 - 삭제 (0) | 2020.12.16 |
ios coredata로 게시판 만들기 - 저장 (0) | 2020.12.16 |