Cocoa2010. 3. 16. 23:05
Cocoa의 CoreData에서 사용하는 데이터모델링 NSObjectModel은 GUI툴로 데이터베이스 모델링이 가능하다.
처음 프로젝트생성시에 데이터베이스모델링을 완전히 끝내놓고 개발하면 별 문제없이 개발이 가능할수 있는데, 개발하다 보면 데이터베이스 모델링이 바뀌는 경우도 있다.
개발도중 데이터베이스모델을 바꾸고 프로그램을 실행시키면 아래와 같은 에러를 내뱉으며 프로그램이 죽는 경우가 있다.

2010-03-16 22:45:03.260 TimeTable[23825:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=134100 UserInfo=0x3c1c470 "Operation could not be completed. (Cocoa error 134100.)", {

    metadata =     {

        NSPersistenceFrameworkVersion = 248;

        NSStoreModelVersionHashes =         {

            Timetable = <efb55f31 22fd534b 5e05d023 739a5e25 1194b93d f88d2028 65179b12 0e5d4b4a>;

        };

        NSStoreModelVersionHashesVersion = 3;

        NSStoreModelVersionIdentifiers =         (

        );

        NSStoreType = SQLite;

        NSStoreUUID = "654E9FC4-1F5F-4478-891C-0B372C300886";

        "_NSAutoVacuumLevel" = 2;

    };

    reason = "The model used to open the store is incompatible with the one used to create the store";

}



이것은 기존에 저장되어 있는 테이블정보와 일치하지 않는다는 이유로 프로그램이 죽는것이기 떄문에 아래 위치에 있는 데이터베이스파일을 삭제해주면 된다.

/Users/유저명/Library/Application Support/iPhone Simulator/User/Applications/00F6XXXXXX(자신이 만든 프로젝트가 어떤것이니 하나하나 열어서 찾는다)/Documents/프로젝트명.sqlite

테이블정보가 바뀌었기 때문에 위 sqlite파일을 삭제해주면 빌드시에 바뀐 테이블정보로 sqlite파일을 생성해주는 것이다.
Posted by 신라
Cocoa2010. 3. 8. 19:47

CoreData를 처음 접했을때 가장 먼저 부딪히는 벽이 각종 클래스들의 정확한 용도와 어떻게 맞물려 움직이는지 샘플코드만 봐서는 잘 이해가 안간다는 것이다.

아래 링크(일본어)에 CoreData의 이해에 첫걸음을 내딪을수 있게 클래스의 용도가 적절히 잘 설명 되어있다.


http://konton.ninpou.jp/program/cocoa/coredata/entry.html


용도만 번역해서 남겨둔다. 참고로 테이블뷰를 이용한 CoreData샘플예에서의 이야기이다.


NSManagedObjectModel ; 데이터베이스의 구조

NSManagedObjectContext ; 데이터베이스 파일내의 데이터 전체의 집합체

NSPersistentStoreCoordinator ; 데이터베이스 파일에의 입출력관계를 처리

NSFetchedResultsController ; NSManagedObjectContext로부터 테이블뷰에 데이터를 표시하기 좋게 데이터를 가공해주는, CoreData형식의 데이터와 테이블뷰와의 다리역활을 해주는것



- Fetch란 SQL스테이트문의 실행을 의미


NSFetchRequest ; SQL스테이트문

NSEntityDescription ; 검색을 실행하는 테이블을 가르키는 SQL스테이트문에서의 'FROM~'부분에 해당

NSSortDescription ; 'SELECT~'나 'order~'에 해당



Posted by 신라
Cocoa2010. 2. 22. 15:00
cocoa with love

cocoaNote:
http://www.big.or.jp/~crane/cocoa/cocoaNote/cocoaNote.html

Learn Cocoa

아이폰/아이팟 터치용 웹 애플리케이션 개발 팁 12개

JQTouch
http://www.jqtouch.com/

이 포스팅은 괜찮은 코코아 개발관련 사이트가 있으면 갱신해 나가야 겠다.
Posted by 신라
Cocoa2010. 1. 9. 23:56

[datePicker addTarget:self action:@selector(pickerDidChange:) forControlEvents:UIControlEventValueChanged];


@selector(pickerDidChange:)
요 부분의 :을 잊지말자! 컴파일시 에러도 안나고 실행시 아래와 같은 에러가 나오는데 원인 찾기가 쉽지않다.

2010-01-09 23:49:36.846 TimeTable[53259:207] *** -[EditTimeTableViewController pickerDidChange]: unrecognized selector sent to instance 0x3c0b460

2010-01-09 23:49:36.847 TimeTable[53259:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[EditTimeTableViewController pickerDidChange]: unrecognized selector sent to instance 0x3c0b460'

2010-01-09 23:49:36.848 TimeTable[53259:207] Stack: (

    30884955,

    2534601993,

    31266875,

    30836342,

    30688962,

    2716761,

    3124130,

    3132867,

    3124057,

    2682893,

    4243847,

    3207980,

    3207508,

    38987545,

    30669504,

    30665800,

    38975373,

    38975570,

    2760707,

    10572,

    10426

)

kill

quit



참고로 unrecognized selector sent to instance는 호출하고자 하는 메서드가 없을때 나는 에러.
Posted by 신라
Cocoa2010. 1. 9. 22:02

#import "MyCustomDelegate";



...


id myCustomDelegate = [[MyCustomDelegate alloc] init];


[titleField setDelegate:myCustomDelegate];

물론 alloc했으면 release도 잊지말것!


Posted by 신라
Cocoa2010. 1. 9. 21:55
아이폰에서는 화면전체의 스크롤이 가능한데 UIDatePicker나 UIPickerView을 동적으로 표시/비표시할때는 이 화면스크롤을 억제해야만한다.
PickerView내의 데이터를 스크롤로 선택해야 하는데 화면전체의 스크롤이 가능하면 이 Picker를 스크롤시키려고 해도 화면전체가 스크롤되어 데이터를 변경시킬수 없다.
그리고 UIDatePicker자체로는 확정하기 위한 버튼등이 없기 떄문에 NavigationBar에 [완료]등의 버튼을 추가해야한다. 따라서, UIDatePicker사용시에는 처음부터 화면에 표시해두면 스크롤이 안돼고,  [취소]나 [완료]등의 버튼이 있는 화면한개를 추가해야만 한다.


Posted by 신라
MAC2008. 12. 4. 12:04
예전에 소개했던 「たのしいCocoaプログラミング」책에 있는 RSS Reader를 만들어 보았다.
안그래도 Object-C의 문법에 위화감이 느껴져 여러가지로 고생하고 있는데 이 책에서 왜 위화감이 느껴졌는지 이유가 있었다.
포인터의 *를 오른쪽이 아닌 왼쪽에 표기하고 있었다.
  NSString* string;

물론 이것도 틀린표현은 아니지만 대부분의 포인터선언은 변수측에 *를 붙이고 있기에 위와같은 사소한 표현에도 위화감을 느껴 처음에는 '아... 오브젝트C는 왜이러냐...'라고 투덜거렸는데 다른 책을 보니까 오브젝트C에서도 오른쪽에 *를 붙이는게 일반적이라는것을 알았다.

아무래도 새로운언어를 받아들이기 싫어하는 나의 무의식이 자꾸 트집잡을것을 찾고 있는듯하다.
Posted by 신라
MAC2008. 11. 28. 14:04
일전에 Tuna님이 iPhone용 어플의 아이디어로 음성인식 SNS이라는게 있었는데 갑자기 그 생각이 나서 음성인식 라이브러리가 있는지 검색해 보았더니 아래와 같은게 존재한다.

사용자 삽입 이미지
http://www.createsystem.co.jp/dtalkerMacOSX.html

원래는 입력한 문서를 읽는다던지 노래를 부른다던지 하는 어플인데 제품을 구매하면 위 링크에서 "일본어 음성인식SDK"를 무료로 제공한다고 한다.
음성인식SDK를 Cocoa에 Framework로 인스톨하면 위 아이디어를 구현가능할 듯 싶다.
문제는 Cocoa touch에서 사용가능하냐는 것인데...
Posted by 신라
MAC2008. 11. 19. 16:29
MacBook에서 Cocoa로 뭐하나 해보려고 지난달 한국에서 사온 책을보며 따라해보는데 책에 나와있는 Interface Builder의 버전이 지금 내 MacBook에 깔려있는 것보다 한참 낮은듯 구성이 일치하지 않는 부분이 많아 애를 먹고 있다.
대충 내버전에 맞게 해석하며 읽긴 했지만 없어지 메뉴항목을 어디서 선택가능한지 도무지 알수가 없어 도중에 포기하고 말았다.
이 책은 이론 위주로 읽어가야만 할 것 같다.
사용자 삽입 이미지


좌절을 딛고 일어서 일본에서 산 아래책의 내용을 따라해보려고 하니 이게 또 책이랑 버전이 틀린지 잘 안됀다. 책에 있는것은 내 MacBook에 있는것보다 더 최신버전인듯하다. 샘플코드를 다운받아 실행시키려고 하니 최신버전으로 작성된 프로젝트라며 내 MacBook에서는 빌드해도 에러가 난다.
아무래도 ADC가서 가장 최신버전을 다운받아 재 인스톨을 해야만 할 것 같다.
사용자 삽입 이미지


이거야 원 내가 아무리 Mac앞에서는 원시인이라고 하지만 이래서야 AppStore는 커녕 MacBook을 집어던지는 날이 오지 않기만을 간절히 기원할 뿐이다.

Posted by 신라
MAC2008. 10. 7. 17:27
iPhone3G에이어 iPod touch 2세대가 출시되고 일본에서는 터치가 지금 품귀현상을 빗고 있다.
그동안 지름신의 유혹에 초연해 있었는데 슬슬 강림하시려고 한다.
그 이유는...
함께 프로젝트를 진행하고 있는 동료가 집에서 취미로 쉐어웨어를 만들어 공개 또는 유트브에 동영상을 올린다던지 CG모델링을 하고 있다는 말을 듣고 나도 뭔가 해보고 싶다는 잊어버리고 있던 욕망이 되살아 나기 시작했다는게 첫번째 이유이고,
맥북은 사 놓고 서핑이나 DVD감상외에는 별로 유용하게 활용하고 있지 않아 맥북을 조금더 적극적으로 활용하고 싶다는게 두번째 이유이다.

맥에서의 개발에는 CoCoa, Objective-C등의 키워드가 있는데 그와 관련한 책을 검색해보니 유명한 책 2권을 합한 가격이 대략7000엔 정도 한다. 헉!

이거 책도 두꺼워 보이는데 뭐하나 만들어볼려면 갈길이 한참 멀듯하다.
App Store에 업로드 할수 있는 날이 올까? ^^;

사용자 삽입 이미지


사용자 삽입 이미지
Posted by 신라