Cocoa2011.08.21 19:30
얼마만에 써보는 블로그인지... ;; 하지만 짧게 기록.

error:Stray'\377' in program
 
XCODE에서 위와같은 빌드에러가 나면 에러가 나는 파일의 Encoding이 UTF-16으로 되어 있을 가능성이 높다.
TextWrangler와 같은 에디터로 문제의 파일을 열어 가장 아랫부분에 있는 Encoding을 UTF-8으로 변경해주면 빌드가 가능해진다. 
신고
Posted by 신라
TAG error, xcode
Cocoa2010.03.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.03.08 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.02.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 신라
TAG cocoa
Cocoa2010.02.21 20:35
XCODE에서 개발하다보면 Interface Builder에서 변경한 곳이나 아니면, 코드상에서 수정한 곳이 실행중인 프로그램에 반영이 안돼는 경우가 있다. 내 기억만으로도 3,4번은 있었던것 같은데 이럴경우에는 Build Clean을 해도 문제 해결이 안돼고 XCODE자체를 완전히 종료시켰다가 다시 실행시켜야지만 제대로 반영이 되는 경우가 가끔있었다.

지금까지는 거의 대부분이 눈에 보이는 곳에서 문제가 발생했었기 때문에 몇번의 삽질끝에 비교적 빠른 시기에 문제를 해결할 수 있었는데, 이번만큼은 아주 제대로 삽질을 했다.

필요로하는 기능을 위해 이틀에걸쳐 코드를 온갖방법으로 수정했었는데 아무리해도 ViewController에 종속되어 있는 View에서 ViewController의 인스턴스를 취득할 수가 없었다. 디버깅을 해보면 늘 NULL값이 세팅되어 기능을 구현할 수가 없었다.
 이틀동안의 삽질끝에 두손두발 다 들고 일주일동안 개발에서 손을 놨다.
도무지 원인을 알 수가 없어 지인에게 질문을 위해 코드를 맥북에 복사해서 지인에게 증상을 설명하고 디버깅을 해 보이는순간 제대로 인스턴스를 취득하고 있는것이 아닌가!?

도대체 이게 무슨 조화인가 했다. 집에 오는 길에 곰곰히 생각해보니 서두에 적었던 아무이상이 없어도 실행시 제대로 반영(동작)이 안돼는 현상에 빠져있었던 것이다.
게다가 맥북에서 iMac으로 갈아탄후에는 컴퓨터의 전원은 커녕 XCODE자체도 종료를 안 시키고 있었기 때문에 이틀의 삽질과 일주일간의 포기기간에도 원인을 알 수 없었던 것이다...
단 한번만 XCODE를 재기동 했었더라면... 나의 그 소중한 시간을...





XCODE에서 모든게 정상인데 제대로 기능이 반영안돼는 현상이 있다면 주저하지 말고 XCODE를 재기동 시켜보자.
삽질의 늪에서 한순간에 벗어날 수 있을지도 모른다...


신고
Posted by 신라
TAG xcode, 삽질
Cocoa2010.01.09 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.01.09 22:02

#import "MyCustomDelegate";



...


id myCustomDelegate = [[MyCustomDelegate alloc] init];


[titleField setDelegate:myCustomDelegate];

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


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


신고
Posted by 신라