NSViewController를 리스폰더 체인에 추가하기

NSViewController가 이벤트를 수신하여 처리하기 좋은 객체인데, 이녀석은 FirstResponder가 될 수 없다보니 코코아에서 기본적으로 이벤트를 수신하는 것이 불가능하다. NSViewController를 사용하면 NIB(혹은 xib)파일로 부터 NSView를 매우 쉽게 불러올 수 있다. 하지만 NSWindowController와는 다르게 몇가지 한계점이 있는데 이 부분을 설명하고 해결방안을 제시하고자 한다. NSWindowController의 경우 NSWindow와 자연스레 연결하여 사용 할 수있게 해주는 다음과같은 기능들을 가지고 있다. NSWindow객체는 windowController메서드를 이용하여 연결된 NSWindowController에 바로 접근 가능 First responder로서 사용자 이벤트를 수신 하여 특정 액션을 실행 가능 (responder chain의 순서는 NSWindow바로 다음) NSWindow의 delegate로서 windowWillClose:, windowDidBecomeMain: 등을 수신하기 적합하고, windowDidLoad, windowWillLoad 등의 오버라이드 가능한 자체적인 메서드도 가지고 있다. 반면 NSViewController의 경우 NSView에서 NSViewController로의 직접적으로 접근하는 방법이 제공되지 않기때문에 기본적으로 연동 기능이 없다고 보면 된다. ...

2013년 10월 28일 · 2분 · 323단어

코어데이터(Core Data) 한줄로 데이터 불러오기

코어 데이터는 익숙해지면 매우 편리한 기능을 제공해주지만 한번 사용하려고 할 때 마다 셋업해줘야 할 것들이 매우 많아서 처음 접해보는 개발자들에게 문턱이 높은 편이다. 애플의 Core Data Programming Guide에서 데이터를 불러오기(fetch)위해 사용하는 코드는 다음과 같다. NSManagedObjectContext *moc = [self managedObjectContext]; NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Employee" inManagedObjectContext:moc]; NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; [request setEntity:entityDescription]; // Set example predicate and sort orderings... NSNumber *minimumSalary = ...; NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(lastName LIKE[c] 'Worsley') AND (salary > %@)", minimumSalary]; [request setPredicate:predicate]; NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES]; [request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]]; [sortDescriptor release]; NSError *error = nil; NSArray *array = [moc executeFetchRequest:request error:&error]; if (array == nil) { // Deal with error... } 단순히 데이터를 불러오기 위해 13줄이나 코드를 쓰는 것은 고역이다. ...

2013년 8월 17일 · 2분 · 259단어

코어데이터(Core Data)와 데이터베이스의 차이

애플의 Core Data Programming Guide 문서에는 코어데이터(Core Data)가 데이터베이스가 아니라고 명시되어있다. 하지만 코어데이터와 데이터베이스 둘다 검색가능하고, 영속적인 저장소를 제공하는 방법이므로 구체적으로 무엇이 다른지는 명확하지 않다. 이 포스트에서는 코어데이터가 동작하는 방법을 살펴보면서 왜 코어데이터가 일반적인 SQL 데이터베이스와 다른지 비교해 볼 것이다(코어데이터를 사용하더라도 실제 뒷단의 저장소는 SQL 데이터베이스가 사용되는 경우도 있다). 소개 코어데이터와 SQL 데이터베이스 모두 구조화된 데이터를 검색가능한 저장소에 저장하는 수단을 제공해준다. 일반적으로 개발자들이 데이터베이스에 익숙하고, 코어데이터가 실제로 뒷단에서 SQLite 데이터 베이스를 사용하여 데이터를 저장하는 경우도 있기 때문에 코어데이터가 마치 SQLite의 wrapper인 것처럼 생각되기 쉽다. ...

2013년 8월 14일 · 6분 · 1250단어

NSSplitView 우선순위 기반 리사이징 예제

NSSplitView의 경우 각 컬럼이 비율을 유지하면서 리사이징 되는것이 기본값이다. 즉 NSSplitView의 크기가 변할때 각 컬럼이 동일 비율로 증가하게되는데, 이러한 방식은 사이드바를 가지는 UI(예: 아이튠즈나 엑스코드의 사이드 바)에는 적합하지 않다. 이 포스트에서는 우선순위 리스트에 기반한 방법으로 사이드바와 메인 뷰를 적절히 리사이징 하는 delegate 클래스를 다뤄보도록 하겠다. 비율 vs. 우선순위 리사이징 3개의 뷰를 가지는 NSSplitView는 다음과 같이 동작한다: 비율 리사이징의 경우, 윈도우 크기가 늘어나면 각 컬럼이 너비가 동일 비율로 증가한다. ...

2013년 8월 5일 · 4분 · 789단어