본문 바로가기
아이폰 개발/ios 개념&튜토리얼

ios coredata로 게시판 만들기 - 로그보기

by 인생여희 2020. 12. 17.

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.완성

완성

 

예제파일

CoreDataTest 2.zip
0.07MB

 

 

연재 포스팅

ios 코어데이터 예제(feat: 기초 개념)

ios coredata로 게시판 만들기 - 조회

ios coredata로 게시판 만들기 - 저장

ios coredata로 게시판 만들기 - 삭제

ios coredata로 게시판 만들기 - 수정

ios coredata 도움되는 링크