ManagedObject & EntityDescription 얻기
Computer Science/ios

ManagedObject & EntityDescription 얻기

728x90
반응형

1. ManagedObjectContext 생성  → *context

대부분의 CoreData메소드들은 ManagedObjectContext를 요구한다. 따라서 Context의 참조값을 얻는 방법에 대해서 알아보자 

이를위해서는 delegate를 확인하고 delegate오브젝트의 managedContextObject메서드를 호출하자

 

 

 AppDelegate *appDelegate =[[UIApplication sharedApplication] delegate];

 

 NSManagedObjectContext *context = [appDelegate managedObjectContext];





2. ManagedObject (EntityDescription) 생성   → *newRecommend

 NSEntityDescription클래스의 insertNewObjectForEntityForName메소드를 호출한다.

그래서 필요한 entity이름Context를 인자로 넘긴다



NSManagedObject *newRecommend = [NSEntityDescription insertNewObjectForEntityForName:@"Recommend"

                                                              inManagedObjectContext:context];

   


NSError *error;

[context save:&error];




    


3. EntityDescription (ManagedObject) 로드   → *entityDesc / *request

ManagedObject가 생성되고 사용되기전에, 해당하는 entityDescription이 로드되어야 한다.

이를 위하여 NSEntityDescription클래스의 entityForName메소드를 호출한다.

그래서 필요한 entity이름과 Context를 인자로 넘긴다. 

그후에 Fetch Request를 만든다



NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"Recommend"

                                              inManagedObjectContext:context];

    

NSFetchRequest *request =[[NSFetchRequest alloc]init];

[request setEntity:entityDesc];





4. ManagedObject의 Attribute 읽기/쓰기

entity와 managedObject는 attribute형태로 데이터를 수용한다. 이들 속성은 벨류-키 코딩 시스템을 이용하여 오브젝트에 저장된다. 키를 이용하여 해당 하는 속성을 설정 할 수도 읽어올 수도 있다. 

( 저장 ) 

managedObject의 이름을 newRecommend라 가정하고 food라는 키를 갖고있다면, 이들 속성의 값은 NSManagedObject인스턴스의 setValue메서드를 통해 설정될 수 있다.


[newRecommend setValue:food.text

                forKey:@"food"];

    

( 읽기 )

반대로 해당 키가 가지고 있는 현재값은 managedObject의 valueForKey메서드로 얻어올 수 있다. 

  NSString *recomFood = [newRecommend valueForKey:@"food"];




5. ManagedObject 가져오기

managedObject가 persistObjectStore에 저장되면 그 오브젝트와 데이터는 읽어올 필요가 있다. 오브젝트는 fetch request를 실행함으로써 추출될 수 잇고 NSArray 오브젝트의 형태로 리턴된다. 

다음은 context와 Description은 이미 얻어졌다고 가정하고 fetch request를 설명함.

수행후에는 objects배열에, 해당 entity에서 모든 managedObject가 저장된다.


NSFetchRequest *request =[[NSFetchRequest alloc]init];

[request setEntity:entityDesc];

    

NSError *error;

NSArray *objects =[context executeFetchRequest:request

                                         error:&error];





6.  ManagedObject 가져오기 ( 조건에 따른 )

앞의 5번과 다르게 해당 entity에서 모든 managedObject를 추출하지 않고, 지정한 범주에 해당하는 managedObject를 추출한다

이를 위해 predicate를 정의한다. 이는 추출해야할 매니지드 오브젝트의 범주를 지정한다. 

다음은 food속성이 "apple"인 매니지드 오브젝트만 추출하는 predicate를 구현하는 코드이다.


NSFetchRequest *request =[[NSFetchRequest alloc]init];

[request setEntity:entityDesc];

NSPredicate *pred = [NSPredicate predicateWithFormat:@"(food = %@)","apple"];

[request setPredicate:pred];

    

NSError *error;

NSArray *objects =[context executeFetchRequest:request

                                         error:&error];

    

    






// 코어데이터를 이용하여 영구저장소에 저장하기

- (IBAction)saveData {

    

    AppDelegate *appDelegate =[[UIApplication sharedApplication] delegate];

    NSManagedObjectContext *context = [appDelegate managedObjectContext];

    

    NSManagedObject *newRecommend = [NSEntityDescription                      

                                             insertNewObjectForEntityForName:@"Recommend"

                                                      inManagedObjectContext:context];

   


    [newRecommend setValue:food.text

                    forKey:@"food"];

    

    NSError *error;

    [context save:&error];

    

}




// 코어데이터를 이용하여 영구저장소에서 데이터 가져오기

- (IBAction)findContack 

{

   

    AppDelegate *appDelegate =[[UIApplication sharedApplication] delegate];

    NSManagedObjectContext *context = [appDelegate managedObjectContext];

    

    NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"Recommend"

                                                  inManagedObjectContext:context];

    

    NSFetchRequest *request =[[NSFetchRequest alloc]init];

    [request setEntity:entityDesc];

    

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"(food = %@)",food.text];

    [request setPredicate:pred];

    

    NSManagedObject *matches = nil;

    NSError *error;

    NSArray *objects =[context executeFetchRequest:request

                                             error:&error];

    



    

    if ([objects count]==0 ) {

        status.text =@"No Matches";

    }

    else{

        matches = [objects objectAtIndex:0];

         NSString *recomFood = [pred valueForKey:@"food"];

        status.text =recomFood;

    }

}


728x90
반응형

'Computer Science > ios' 카테고리의 다른 글

[iOS개발 강의] (2 주차) swift 기본문법 2  (0) 2022.02.08
[iOS개발 강의] (1 주차) swift 기본문법  (0) 2022.01.25
food chart  (0) 2012.12.20
muaic chart  (0) 2012.12.20