RAW SQL
CoreData관련 코드를 작성하고 테스트하다 보면, 실제 SQL이 어떻게 동작되는지 궁금할 때가 있습니다.어떤 SQL문이 언제 호출이 되어서 실행이 되는지 보면, Commit을 언제 해야 될지 적절할 시기를 알 수 있습니다.
XCode의 Scheme을 드롭다운해서 열고, Edit Scheme을 선택, 'Run {app name}'을 선택하고, Arguments 탭에서 Arguments Passed On Launch에 '+'버튼을 선택해서 아래 내용을 추가합니다.
'-com.apple.CoreData.SQLDebug 1'
그리고 실행을 하면, 실제 SQL문이 어떻게 호출 되는지 표시가 됩니다.
CoreData에서 Object가져오기.
AppDelegate에 추가한 함수를 통해서 managedContext를 받아와야 읽거나, 저장할 수 있습니다.CoreData에서 데이터를 fetch해서 가져오기 위해서, NSFetchRequest를 만들고, executeFetchRequest를 통해서, NSManagedObject의 형태로 받아 옵니다.
받아올 때, 필터링하기 위해서, NSPredicate를 설정하고, 정렬해서 보기 위해서 NSSortDescriptor를 설정합니다.
- (void) function { NSError *error; SPQAppDelegate *appDelegate = [UIApplication sharedApplication].delegate; NSManagedObjectContext *managedContext = [appDelegate managedObjectContext]; NSFetchRequest *request; request = [NSFetchRequest fetchRequestWithEntityName:entityName]; request.predicate = [NSPredicate predicateWithFormat:@"name = %@ && created=%@", name, (created)?@"YES":@"NO"]; NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; NSArray *items = [managedContext executeFetchRequest:request error:&error]; if (error != nil) { NSLog(@"executeFetchRequest: %@", [error localizedDescription]); } //.... }
새로운 Object 만들기
신규로 object를 만들고, 거기에 값을 넣은 후, 저장을 하면, CoreData에 저장이된다.item = [NSEntityDescription insertNewObjectForEntityForName:entityName //추가할 entity이름 inManagedObjectContext:managedContext];
기존 Object 지우기.
managedObject를 찾은 다음, 그 object를 manageObjectContext에서 삭제하면 된다.[managedContext deleteObject:item]; //item은 NSManageObject 임.
Boolean값을 비교하기
predicate를 만들 때, String은 '=='로 비교를 하지만, Bool인 경우에는 NSNumber를 이용해서 비교를 해야 한다.[NSPredicate predicateWithFormat:@"name == %@, created == %@", name, [NSNumber numberWithBool:created]];
제가 필요한 것만 정리를 해 둡니다.
댓글 없음:
댓글 쓰기