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

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

by 인생여희 2020. 12. 15.

ios coredata로 게시판 만들기

 

이번 포스팅 부터 몇 차례 coredata를 이용해서 간단한 게시판 예제를 만들어 볼려고한다. 2개의 테이블을 이용해서 글을 작성하고, 로그를 기록하는 기능이 담겨있는 간단한 예제이다. 이번 시간에는 테이블을 생성하고 Board 테이블에서 제목과 내용을 조회해서 cell에 뿌려주는 부분까지 진행해본다.

 

 

1.coredata 파일로 가서 테이블을 생성해주고, 관계를 만들어 준다.

Board 테이블은 아래와 같은 3개의 속성이 있고 로그 테이블과는 일대다의 관계를 맺고 있다.

 

Board 테이블

 

 

로그 테이블은 아래와 같은 2가지 속성이 있다. 그리고 Board 테이블과는 다대일의 관계를 맺는다.

 

Log 테이블

 

2.Navigation Controller 기반의 TableView 만들기

아래 사진 처럼 Navigation Controller기반의 TableView를 만들어준다. TableView Cell 스타일은 Subtitle 이라고 설정하고, Accessory에 Detail Disclosure을 설정해 준다. 테이블뷰를 오른쪽 클릭 후 ViewController 위쪽 노란색 동그라미로 드래그 앤드롭해서 'delegate'와 'datasource'를 선택해 준다. 그리고 cell의 Identifier를 'cell' 이라고 작성 해준다.

 

Navigation Controller 기반의 TableView 작성에 대한 내용은 이 포스팅을 참고하면 된다. 이곳에서 구체적인 설명과 예제파일을 다운로드 할 수 있다.

 

 

Navigation Controller 기반의 TableView

 

 

3.TableView 프로토콜 채택

TableView 사용을 위해서 필요한 테이블 뷰 델리게이트 프로토콜을 채택해 주고, viewDidLoad에서 델리게이트 설정을 해준다. 참고로 UIViewController이름을 ListVC로 변경했다. 변경한 UIViewController 이름을 스토리 보드의 테이블뷰를 작성한 ViewController와 매핑시켜 준다. 마지막으로 CoreData를 import 해준다. 

 

 

4. 인스턴스 변수 셋팅

ListVC.m에서 필요한 변수를 셋팅해준다. 스토리보드에서 만든 tableView를 IBOutlet 변수와 연결시켜 주었고 coredata 저장과 조회, 삭제, 수정을 위한 context, 조회한 데이터를 담을 배열 타입의 list 변수를 설정해 주었다.

 

#import "Board+CoreDataClass.h"
#import "ListVC.h"

@interface ListVC ()

@property (strong, nonatomic) IBOutlet UITableView *tableView;
@property (nonatomic, weak) AppDelegate *delegate;
@property (nonatomic) NSManagedObjectContext *context;
@property (nonatomic) NSArray <Board*> * list;

@end

 

5.viewDidLoad 작성

앱이 메모리에 올라갔을때 설정해주어야 할 부분을 viewDidLoad에 작성해준다. 먼저 tableView delegate를 설정해주고, appDelegate 객체를 참조, 관리컨텍스트 참조, 요청객체 생성, 데이터 조회 순으로 로직을 작성해 준다.

 

- (void)viewDidLoad {
    [super viewDidLoad];
  
    //델리게이트 설정
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    
    //1. 앱델리게이트 객체 참조
    self.delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    
    //2.관리객체 컨텍스트 참조 (DAO)
    self.context = self.delegate.persistentContainer.viewContext;
    
    //3.요청 객체 생성
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Board"];
    
    //3-1. 정렬 속성
    NSSortDescriptor *sort = [[NSSortDescriptor alloc]initWithKey:@"regdate" ascending:NO];
    [fetchRequest setSortDescriptors:@[sort]];
    
    //4.데이터 가져오기
   self.list = [self.context executeFetchRequest:fetchRequest error:nil];
    
}

 

6.행개수 가져오기

 

//행 개수
- (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.list.count;
}

 

7.테이블 뷰 셀 구성

list에는 CoreData에서 가져온 NSManagedObject 객체들이 배열로 들어가있다. 이 배열에서 indexPath.row를 이용해서 객체를 하나씩 뽑아낸후, tableView Cell에 제목과 콘텐츠를 설정해준다.

 

//셀 구성
- (nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
    
    //해당하는 데이터 가져오기
    Board * record = [self.list objectAtIndex:indexPath.row];
    NSString * title = [record valueForKey:@"title"];
    NSString * contents = [record valueForKey:@"contents"];
    
    //셀 생성
    UITableViewCell * cell =  [self.tableView dequeueReusableCellWithIdentifier:@"cell"];
    
    
    //값 대입
    cell.textLabel.text = title;
    cell.detailTextLabel.text = contents;
    
    return cell;
    
}

 

 

이전포스팅 

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

 

 

예제파일

CoreDataTest.zip
0.06MB