IOS 성장 의 길 - CoreData 사용

본문 은 다음 과 같다.http://wangliang.me/?p=517
코어 데이터 기반 에서 코어 데이터 의 이론 적 기반 을 이미 배 웠 으 며, '마스터 - 디 테 일 애플 리 케 이 션' 프로젝트 의 코드 분석 을 바탕 으로 한 편 이 실전 에 직접 돌입 했다.
"Empty Application" 의 빈 항목 부터 TestCoreData 라 고 명명 하고 Use Core Data 를 선택 합 니 다. AppDelegate 에서 Xcode 는 CoreData 기본 코드 를 만 들 었 습 니 다.
모델 링
xcdatamodel 파일 을 열 고 Add Entity 단 추 를 누 르 면 실 체 를 추가 하고 이 실 체 를 Student 라 고 명명 합 니 다. 다음 그림 입 니 다.
Attribute 추가 버튼 ("+" 번 호 를 클릭 할 수도 있 습 니 다) 을 누 르 고 세 개의 속성 age, name, birth 를 추가 합 니 다. 유형 은 Integer 32, String, Date 입 니 다. 다음 그림 입 니 다.
똑 같이 하나의 실 체 를 Course 로 추가 하고 두 개의 속성 title, score 를 추가 하 며 유형 은 String, Integer 32 입 니 다.
현재 Student, Course 두 개의 실 체 를 만 들 었 습 니 다. 그 다음 에 이 두 개의 실 체 를 연결 시 켜 야 합 니 다. 먼저 그들 사이 에 어떤 관계 가 존재 하 는 지 보 겠 습 니 다. 다음 과 같 습 니 다.
위의 그림 에서 보 듯 이 Student 와 Course 사이 에 한 쌍 이상 의 관계 가 존재 합 니 다. Student 실 체 를 선택 하고 Relationships 에 course 관련 을 추가 합 니 다. 또한 Course 의 Relationships 에 student 관련 을 추가 합 니 다. reloationship 의 Destination 과 Inverse 는 다음 그림 과 같 습 니 다.
한 쌍 의 다 중 관계 이기 때문에 courses 관계 에서 'to - mani Relationship' 을 선택 하고 아래 그림 의 빨간색 상자 선택 처 를 선택 하 십시오.
이로써 모델 링 부분 이 완성 되 었 습 니 다. 우 리 는 Xcode 가 Managed Object 의 하위 클래스 를 생 성 해 야 합 니 다. 새 파일 은 Core Data 를 선택 하고 NS Managed Object subclass 를 기반 으로 다음 그림 을 만 듭 니 다.
Student 와 Course 두 실 체 를 선택 하고 Next 를 누 르 면 생 성 됩 니 다.
Xcode 는 Student 와 Course 의 모델 코드 를 만 들 었 습 니 다.
학생 목록
♥ 관리 대상 컨 텍스트 가 져 오기 ♥ NSFetched Results 컨트롤 러 대상 가 져 오기 이렇게 위의 사고방식 에 따라 쓰 면 초기 화 함수 에 managed Object Context 를 부여 하고 NSFetched Results Controller 대상 을 가 져 오 는 코드 는 기본적으로 템 플 릿 화 된 코드 입 니 다. 위의 코드 를 붙 여 조금 만 고치 면 됩 니 다. 네 비게 이 션 표시 줄 오른쪽 에 '+' 버튼 을 누 르 면 학생 보 기 를 추가 하 는 것 을 표시 합 니 다.
학생 상세 보기
이 보 기 는 학생 들 의 기본 정보 와 수업 점수, Listing Student View Controller 와 Detail Student View Controller 간 에 구성원 속성 student 을 통 해 변 수 를 전달 하고 UITextView 로 학생 들 의 수업 점 수 를 표시 합 니 다.
- (void)setupPrototypes
{
    lblName.text = student.name;
    self.title = student.name;
    lblAge.text = [student.age stringValue];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    lblBirth.text = [dateFormatter stringFromDate:student.birth];
 
 
    NSString *strTemp = @"";
    for (Course *course in student.courses) {
        strTemp = [strTemp stringByAppendingFormat:@"%@: %@ \r
"
, course.title, course.score]; }   txtCourse.text = strTemp; }

학생 정보 추가
학생 정 보 를 추가 하 는 절차 도 기본적으로 차이 가 많 지 않 으 니 템 플 릿 코드 를 고 쳐 라.
- (IBAction)createButtonPushed
{
    Student *student = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:managedObjectContext];
 
    student.name = txtName.text;
    student.age = [[NSNumber alloc] initWithInt:[txtAge.text intValue]];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    student.birth = [dateFormatter dateFromString:txtBirth.text];
 
 
    NSError *error = nil;
    if (![managedObjectContext save:&error])
    {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
    [self.navigationController popViewControllerAnimated:YES];
}

수업 점수 추가
Xcode 는 학생 들 에 게 과정 을 추가 하 는 방법 인 addCoursesObject 를 만 들 었 기 때문에 이 함수 로 학생 들 에 게 과정 을 추가 하면 다른 일 은 CoreData 프레임 워 크 에서 처리 합 니 다.
- (IBAction)addButtonPushed
{
    Course *course = [NSEntityDescription insertNewObjectForEntityForName:@"Course" inManagedObjectContext:managedObjectContext];
 
    course.title = txtCourseName.text;
    course.score = [NSNumber numberWithInt:[txtCourseScore.text intValue]];
    [student addCoursesObject:course];
 
    NSError *error = nil;
    if (![managedObjectContext save:&error])
    {
        //     .
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
 
    [self.navigationController popViewControllerAnimated:YES];
}

좋은 웹페이지 즐겨찾기