2009년 1월 6일 화요일

코코아 프로그래밍 3판 몇가지 오탈자들 # 2 (8~13장까지)

중간중간 띄엄띄엄 보긴 했지만 아무튼 몇가지 오탈자 또는 안되는 것들을 발견했습니다.

원서쪽 오탈자 관련 사이트를 가보니 이런저런 글들이 많더군요. 번역본의 교정 자체도 문제지만 원서 자체에도 오탈자가 좀 되는 것 같습니다.

아무튼 오늘 찾은 것들 정리해두니 도움되시기 바랍니다. ( 혹시 잘못된게 아니라면 댓글이나 이메일로 알려주시기 바랍니다 )


p191, 11장 코어 데이터 기초 : ( 끝까지 똑같이 따라했지만 마지막에 동작하지 않았음 ㅠ.ㅠ, 오타는 아니고 신세한탄 )


p196 이미지 위쪽 : "또한 Generate Decimal Numbers and Always Shows Decimal 옵션을 선택하자" 는 "또한 Generate Decimal Numbers 와 Always Shows Decimal 옵션을 선택하자" 입니다. Generate Decimal Numbers and Always Shows Decimal 이라는 옵션은 없습니다.


p196 이미지 아래 둘째줄 : "셀을 선택하고 이름을 지운다" 는 내용상 "셀을 선텍하고 Title (또는 제목?) 을 지운다" 라고 해야 합니다. 이름을 지운다 라고 하면 보통 Name 필드를 찾기 때문인데 그림 11.6을 보건데 "Title" Attribute 를 지우라는 의미입니다.


p225 책에 적힌대로 코딩하면 동작하지 않습니다. 책에는 extern 두줄을 PreferenceController.h 에 넣고 실제 BNRTableBgColorKey 와 BNREmptyDocKey 는 PreferenceController.m 의 정의하라고 되어 있는데 의미상으로나 동작을 하게 만들기 위해서나 Preference 에서 쓰는 두 상수의 정의는 PreferenceController.h 에 있어야 하고 이 상수들을 쓰는 파일(PreferenceController.m 같은 곳)에서 extern 을 적어주어야 합니다.

p226 상단 코드 중

[defaultValues setObject:[NSNumber numberWithBool:YES] forKey:BNRKey]

[defaultValues setObject:[NSNumber numberWithBool:YES] forKey:BNREmptyDocKey]

로 고쳐야 합니다.


p227 BNRTableBgColorKey 와 BNREmptyDocKey 를 PreferenceController.h 에다가 정의해 놓았기 때문에 PreferenceController.m 에서는 두 상수에 대해서 extern 만을 적어주어야 합니다.

따라서 소스코드의 2~3번째 줄의

NSString * const BNRTableBgColorKey = @"TableBackgroundColor";
NSString * const BNREmptyDocKey = @"EmptyDocumentFlag";

extern NSString * const BNRTableBgColorKey;
extern NSString * const BNREmptyDocKey;

로 바꿔주어야 컴파일이 됩니다.


p230 위쪽 코드를 실행하면 동작하지 않는데 의 마지막 부분에

[tableView setBackgroundColor:[NSKeyUnarchiver unarchiveObjectWithData:colorAsData]];

부분때문에 그렇습니다. RaiseMan 예제를 쭉 따라서 해왔다 하더라도 151p의 문제2번을 하지 않으셨다면 현재 MyDocument.h 에 tableView 가 없을겁니다.

MyDocument.h 의 @interfance 쪽에

IBOutlet NSTableView *tableView;

를 추가하고 인터페이스 빌더를 실행시켜 xib에서 table view 를 tableView 로 연결시켜야 제대로 동작합니다.

그리고 230p 코드 아래쪽 보면 "반드시 PreferenceController.h를 임포트해야 거기에 선언한 전역 변수를 사용할 수 있습니다" 라고 되어 있는데 앞에서처럼 수정했다면 두 상수를 extern 으로 대치하시면 됩니다.


참고로 코코아 프로그래밍 앞쪽부터 나오는 RaiseMan 예제는 반드시 차례대로 꼭 해두셔야 합니다. RaiseMan 을 확장해서 만들어 가는 부분들이 꽤 많기 때문에 처음부터 생략하고 넘어가게 되면 자연스럽게 뒤쪽도 죄다 생략해야 하는 불상사가 발생할지도요.

시간이 늦은 관계로 일단 오늘은 여기까지 -_-;;

댓글 2개:

  1. 좋은 정보 감사합니다.. 초보가 책만 따라가다보니 막히는 부분이 많았는데.. 뭔가 시원스럽네요.. ^^;;

    현재 15장을 따라가는중에 막혀서 검색중에 찾아오게되었습니다..

    저는 13장까지 RaiseMan 진행하면서.. 'BNRKey' -> 'BNREmptyDocKey'로 수정하고.. extern 부분은 책 내용대로하고..

    'IBOutlet NSTableView *tableView;' 이 부분은 제가 작성한 코드에 있길래 찾아보니 166p 상단에 정의되어있더군요.. ^^

    여기까지는 잘 실행이 되었는데..

    14장에서 Notification 까지 진행하였더니 제대로 안되어서 고민하다가 userInfo까지 진행하고서야 제대로 실행되더군요..

    현재는 15장 진행했는데.. 안되서 또 머리 싸매고 있는중이랍니다;; 이거 매 장 할때마다 머리를 싸매고 있으니;; ㅎㅎ;;

    그럼 다음글 기대하겠습니다.. ^^

    답글삭제
  2. @Zino - 2009/01/08 01:36
    14장의 notification 은 userInfo 딕셔너리로 컬러정보를 넘기는 부분을 구현해야만 실제로 RaiseMan 의 Preference 에서 색깔을 바꾸면 즉시 색이 변경되구요, 그 부분 구현 전에는 handleColorChange에서 tableView의 배경색 변경하는 코드가 없기 때문에 단순히 NSLog 의 "Receiving notification ... " 내용만 찍힙니다.



    238p 젤 아래줄과 239p 첫줄의 설명이 좀 이상하게 되어 있는거 같더군요.



    NSUndoManager 부분은 읽어만 보고 코딩을 안했더니 거기에서도 tableView 가 있는걸 몰랐네요. 알려주셔서 감사합니다. :)

    답글삭제

가장 많이 본 글