오브젝트C2010. 10. 12. 03:58
자바보다 훨씬 직관적인 object-c 의 간단한 NSThread 사용 방법

자바보다 훨씬 직관적이다. import할 클래스나 delegate도없다.

- (IBAction) startThreadButtonPressed:(UIButton *)sender {

threadStartButton.hidden = YES;
threadValueLabel.text = @"0";
threadProgressView.progress = 0.0;
[NSThreaddetachNewThreadSelector:@selector(startTheBackgroundJob) toTarget:selfwithObject:nil];

}

- (void)startTheBackgroundJob {

NSAutoreleasePool *pool = [[NSAutoreleasePoolalloc] init];
// wait for 3 seconds before starting the thread, you don't have to do that. This is just an example how to stop the NSThread for some time
[NSThreadsleepForTimeInterval:3];
    [selfperformSelectorOnMainThread:@selector(makeMyProgressBarMoving) withObject:nilwaitUntilDone:NO];
    [pool release];

}

- (voidmakeMyProgressBarMoving{
    
float actual = [threadProgressViewprogress];
threadValueLabel.text = [NSStringstringWithFormat:@"%.2f", actual];
if (actual < 1) {
threadProgressView.progress = actual + 0.01;
[NSTimerscheduledTimerWithTimeInterval:0.5target:selfselector:@selector(makeMyProgressBarMoving) userInfo:nilrepeats:NO];
}
elsethreadStartButton.hidden = NO;

}


1.버튼을 누르면 아래의 스레드가 실행된다. 자바에서 start()와 같은 역할.
[NSThreaddetachNewThreadSelector:@selector(startTheBackgroundJobtoTarget:selfwithObject:nil];
2. 콜백으르 startTheBackgroundJob가 있고 위에 정의된 함수가 콜백된다. 자바의 run()과같은 역할
2.1 스레드에의해 콜백되는 함수는 
    NSAutoreleasePool *pool = [[NSAutoreleasePoolallocinit];로 시작하고

    [pool release];로 끝나야한다.

    시작점과 끝점사이 실제실행하고싶은 코드나 함수호출코드를 집어넣으면 된다.


2.2 위의 콜백함수는 타이머에

NSAutoreleasePool *pool = [[NSAutoreleasePoolallocinit];

// wait for 3 seconds before starting the thread, you don't have to do that. This is just an example how to stop the NSThread for some time

[NSThreadsleepForTimeInterval:3];

    [selfperformSelectorOnMainThread:@selector(makeMyProgressBarMovingwithObject:nil

     waitUntilDone:NO];





출처 : http://blog.naver.com/PostList.nhn?blogId=philipousys¤tPage=151
Posted by 오늘마감

댓글을 달아 주세요

아이폰기본사용2010. 7. 1. 18:08
아이폰에서 사용 안하는 기본어플 아이콘 홈화면에서 삭제하기 (주식/시계/계산기/날씨/메모장 등)

순정폰에서 기본으로 제공되는 어플들은 삭제가 불가능하기 때문에

사용하지 않는 어플 아이콘이 홈화면에서 자리만 차지한다는 불편함이 있습니다.

특히나 주식 어플은 주식을 하지 않는 사람으로서는 눈엣가시죠.

시계나 계산기, 날씨, 녹음 어플도 마찬가지.

기본어플보다 훨씬 좋은 무료어플들이 앱스토어에 많지요.

아이폰에 기본으로 제공되는 어플 아이콘을  홈화면에서 삭제하는 방법입니다.
이 방법은 순정폰에서 사용 가능하고요,

이 방법을 사용해 아이콘을 삭제하면 아이폰을 복원해야 다시 살릴 수 있으니

하시기 전에 신중을 기하시고요,

만약을 위해서 백업을 다른 곳에 저장해 두시는게 좋습니다. 

방법을 먼저 간단히 요약해 보자면

1. 아이폰 설정-일반-차단에서 사파리를 임시 차단

2. 아이튠스로 아이폰 백업하고 아이튠스 종료.

3. iBackup Bot for Itunes 프로그램으로 이 백업파일을 열고

4. 스프링보드 plist를 고쳐준 뒤 restore-재부팅

상세한 방법은 다음과 같습니다.

1.

iBackup Bot for Itunes 프로그램을 다운받고 PC에 설치합니다.
 
 * 이 프로그램의 용도와 상세한 사용법은 제 이전 글
http://blog.naver.com/tumira/40105433121 을 참조해 주세요.
 

2.

아이폰 설정 - 일반 - 차단 메뉴를 열고

아래 스샷 맨 아랫부분 "차단 끔" 부분을 클릭합니다.

차단 메뉴는 다른 사람이 아이폰으로 나쁜짓을 하지 못하도록

아이폰 사용을 임의로 제한하게 해주는 기능을 제공합니다.

집에 어린이가 있는 경우 유용하게 사용할 수 있어요.

3.

위의 차단 활성화를 눌러줍니다.

4.

암호를 입력하라는 창이 뜰겁니다.

암호를 입력해주면, 다시 입력하라는 창이 뜹니다. 한번 더 입력합니다.

이 암호는 반드시 기억해 두셔야 해요! 잊어버리시면 안됩니다!

5.

암호를 2번 입력하면  

이렇게 창이 뜰겁니다. 맨 위 Safari 우측의 파란 버튼 우측을 눌러줍니다.  

6.

사파리 사용이 차단되었습니다. 

이 상태로 홈버튼을 눌러서 설정 어플을 종료합니다.

7.

설정을 마친 후 홈화면을 확인해 보면

사파리 아이콘이 사라진 것을 보실 수 있어요.

설정- 차단에서 암호를 입력하고 다시 비활

성화 시키지 않는 한

아이폰에서 사파리를 사용할 수 없게 되는거죠.

즉, 암호를 모르면 사파리 사용이 불가능합니다.

8.

PC에서 아이튠스를 실행시키고, 아이폰을 PC에 연결한 뒤

좌측 아이폰 부분을 오른쪽 클릭해서 아래처럼 백업을 해줍니다.

9.

백업이 끝나면  아이튠스를 종료하고,  iBackup Bot을 실행합니다.

대충 아래와 같은 화면이 뜰겁니다.

10.

좌측에 보시면 백업 리스트가 보일겁니다.

이 중에서 날짜, 시간을 확인해서 방금 백업한 파일을 클릭하면

아래와 같이 파일을 읽어들인 후 파일 리스트가 좌르륵 나타납니다.

11.

파일을 찾기 좋도록, Path 부분을 클릭해서 파일을 경로별로 정렬해 줍니다.

12.

Library ≫ Preferences ≫ com.apple.springboard.plist 를 찾아줍니다.

13.

해당 파일을 더블클릭하면 아래와 같이 plist 창이 뜹니다.

plist 본문 내용은 설정이나 설치된 어플에 따라서 각각 다를겁니다.

Export 메뉴를 이용하거나, 파일 본문을 노트패드 등에 카피 -> 다른 곳에 저장 등으로 

백업을 미리 해둡니다. (만일의 사태에 대비)

14.

plist에서 아래 문구를 찾아줍니다. 

SBParentalControlsApplications

com.apple.mobilesafari

15.

이 문구에서

com.apple.mobilesafari에 해당하는 부분을

com.apple.stocks 으로 바꿔줍니다.

16.

그리고 나서 iconState2 라는 문구를 찾아줍니다.

상단 망원경 모양의 메뉴를 클릭하면 검색창이 뜹니다.

이 검색창을 이용해서 검색하셔도 됩니다.

검색창에 가려서 매치 결과가 안보이면

창을 위로 끌어 옮기면 됩니다.

17.

 iconState2 를 찾으셨다면 거기서부터 아래로 죽 내려가면서

com.apple.stocks 문구를 찾아보세요.

어플을 약 100개 정도 깔았고, 주식 어플 아이콘이 홈화면 마지막 페이지에 위치한다면

한참을 내려가야 찾을 수 있을겁니다.

18.

찾으셨다면 이 문구를

com.apple.mobilesafari 으로 바꿔줍니다.

stocks를 mobilesafari로 바꿔주시고

좌측 상단 디스켓 아이콘을 클릭해서 저장합니다.

* 만일 저장 메뉴를 클릭했는데 에러 메시지가 뜬다면

입력을 잘못했기 때문인 겁니다.

입력한 내용을 다시 찬찬히 들여다 보고 올바르게 입력해 주세요.

19.

이제 다 되었습니다. 좌측 File - Restore를 클릭합니다.

20.

아래와 같이 새 창이 뜰겁니다.

가운데 Restore only modified file(s)를 선택하고  OK 버튼을 클릭합니다.   

21.

몇분동안 Restore가 진행되고, 아이폰이 재부팅됩니다.

재부팅 후 아이폰 홈화면을 보시면 주식 아이콘이 사라졌을 겁니다.

그리고, 사파리 아이콘 위치가 변경되었을 겁니다.

사파리 아이콘이 사라졌다고 저한테 책임지라고 하지 마시고

찾아보세요. 분명히 있습니다. ^^

사파리 아이콘을 찾아서 편한 곳으로 옮기시고,

혹시나 모르니까 아이폰 검색메뉴로 Stocks를 검색해 보세요.

검색결과가 없다고 나오면 성공한 겁니다.

같은 방식으로 계산기, 메모장 등

사용하지 않는 기본 어플 아이콘을 삭제할 수 있습니다.

 이렇게 했는데도 주식 어플이 여전히 홈화면에 남아 있다면

1. 코드를 잘못 입력했다.

2,. 코드는 맞게 입력했는데, 저장을 하지 않았다.

3. 저장 메뉴인 디스켓 아이콘을 제대로 클릭하지 않아서

수정한 내용이 저장되지 않았다.

4. 저장은 했는데 Restore를 하지 않았다.

5. 위의 글 순서대로 하지 않았다.

이 5가지 중 하나일 겁니다.

특히 3번일 가능성이 제일 큽니다. 저장을 다시 하고 restore 해보세요!

뭔가를 잘못해서 문제가 생겼다면

아까 백업해둔 plist를 덮어쓰기해서 다시 restore 하시거나,  

아이튠스를 열고, "백업으로 복원" 하시면 됩니다.

* 이 팁은 외국 사이트 http://www.macosxhints.com/article.php?story=20100131111103616 에서 가져왔어요.

 


출처 : http://blog.naver.com/PostView.nhn?blogId=jkw1120&logNo=60106404553
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 6. 24. 14:17
한글입력기 nabi의 설치와 사용
ubuntu Edgy 에서 사용언어를 한글로 선택한 후 설치를 하면 기본 입력기로 SCIM이 설치됩니다. 하지만 많은 어플리케이션에서 SCIM으로는 한글 입출력에 문제가 발생합니다.

개인적으로는 nabi 한글입력기를 추천하고 싶습니다. 대부분의 어플리케이션에서 문제없이 한글입출력이 가능합니다.


[설치방법]

* 네트워크는 사용가능해야 합니다.


Gnome 데스크탑에서 프로그램 -> 터미널을 선택하여 빈 터미널을 엽니다.



$ sudo apt-get install nabi im-switch

nabi 와 im-switch 를 설치한다.


$ gedit ~/.gnomerc

에디터 프로그램에서 .gnomerc 파일을 연다

export XMODIFIERS="@im=nabi"
export XIM_PROGRAM=/usr/bin/nabi
export GTK_IM_MODULE=xim
export QT_IM_MODULE=xim
nabi &

열린 gedit 창에 다음과 같은 내용을 입력한 후 저장한 후 종료.


$ im-switch -s nabi

마지막으로 입력기를 nabi로 설정한다.


위와 같은 순서로 설정한 다음 리부팅을 하시면 한글 입력기가 nabi로 변경됩니다.


한영 전환은 shift+space로 됩니다.



 


출처 : http://blog.naver.com/PostView.nhn?blogId=j021004&logNo=50035903759
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 6. 24. 13:18
앱에서 database 사용
한참...아래 무인도 님이 질문을 하셔서..답을 쓰다가 넘 길어서 여기로 옴겨 적습니다~^^

앱 제작시에 필요한 간단한 팁을 올립니다.

1. XCode를 깔아서 쓰고 있다면 이미 mysqlite3가 설치되어있지요.
2. Finder-->응용프로그램-->유틸리티-->터미널  을 실행시키시고,  터미널 화면에서 sqlite3 이라고 치세요
3. 만약에 sqlite3이 실행이 않되면 MAC Installtion Disk를 가지고 모든  XTools를 설치하셔야 합니다.
4.  2에서 실행이 ‰榮摸


출처 : http://blog.naver.com/PostView.nhn?blogId=gonagi&logNo=150045124558
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 6. 22. 17:54
과제A - 클래스 생성과 사용

Lecture2 의 숙제에 대한 설명 또한 Lecture3 에서 주어지는것 같다. 쉬운 답을 얻기전에 검색해서 풀어보란 뜻인가??

아무튼 그냥 순서대로 Lecture3을 듣지 않은 상태에서 Lecture2의 숙제를 하기로 한다.


과제A. 클래스 생성과 사용  원문: WhatATool (Part II)


<순서>
Section 5. 클래스 생성
Section 6. 생성한 클래스 사용


이번 과제에서는 PolygonShape(다각형) 클래스를 생성한후 WhatATool의 메인 함수에서 클래스를 호출하는 함수를 불러본다.


아래와 같은 소스가 추가 될 것이다.


int main (int argc, const char * argv[]) {
    NSAutoreleasepool * pool = [[NSAutoreleasePool alloc] init];

    PrintPathInfo(); // Section 1
PrintProcessInfo(); // Section 2
PrintBookmarkInfo(); // Section 3
PrintIntrospectionInfo(); // Section 4
PrintPolygonInfo(); // Section 6 (section 5는 메인에 함수를 추가하지 않는다)
[pool release];
return 0;
}


Section 5. 클래스 생성

■ 새로운 PolygonShape 라는 클래스 만들기 (다각형 클래스)


Xcode에서
1.File > New File을 선택
2.Mac OS X아래 CoCoa 섹션의 'Objective-C class' 템플렛을 선택한다.
3.PolygonShape.m 으로 생성한다. - 헤더파일을 만들기 위한 체크박스를 체크하는 것을 잊지 말것.


* 새로운 클래스는 디폴트로 NSObject를 계승받는다.


자 이제 새로운 클래스에 속성을 부여해보자.
Objective-C 2.0은 오브젝트의 속성에 접근하는 새로운 메커니즘을 제공한다.
클래스는 "properties"를 정의 할 수 있으며, 이것이 유저가 클래스에 억세스 하는 방법을 제공한다.
properties는 개발자의 단순작업(getter/setter 코딩)을 없애주며 메모리 관리 폴리시와 속성의 사용법을 정의하도록 해준다.
예를 들면, property를 읽기 전용으로 지정하거나 오브젝트의 소유권등을 정의할 수 있다.


■ PolygonShape 클래스에 속성 지정하기


1. 아래의 속성을 지정한다.
• numberOfSides(면의 수) – 정수형
• minimumNumberOfSides(최소 면의 수) – 정수형
• maximumNumberOfSides(최소 면의 수) – 정수형
• angleInDegrees(내각) – 실수형, 읽기전용
• angleInRadians(호도) – 실수형, 읽기전용
• name(이름) – NSString 오브젝트, 읽기전용


2. numberOfSides, minimumNumberOfSides, maximumNumberOfSides의 세가지 속성은
적절한 타입의 인스턴스 변수로 저장될 수 있어야 한다. 이 속성들은 @synthesize 옵션을 이용하면 컴파일러가
자동으로 getter/setter를 생성하여주며, 읽기 전용 속성은 getter만이 생성된다.


3. setter 메소드에 아래와 같은 조건을 부여하라
• numberOfSides – 최소값과 최대값의 사이 값만 가질수 있다.
• minimumNumberOfSides – 2보다 커야 한다.
• maximumNumberOfSides – 12보다 작아야 한다.


maximumNumberOfSides에 5가 설정되어 있는데 numberOfSides에 9를 세팅하려고 한다면 아래와 같은 에러로그를 출력하라.
Invalid number of sides: 9 is greater than the maximum of 5 allowed


4. 아래와 같은 초기화 메소드를 생성하라.
- (id)initWithNumberOfSides:(int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max;


5. 슈퍼클래스인 NSObject의 init메소드를 오버라이드 하여 아래와 같은 디폴트값을 설정하는 커스텀 init을 생성하라.
numberOfSides – 5, minimumNumberOfSides – 3, maximumNumberOfSides – 10


6. angleInDegrees와 angleInRadians는 @synthesize 옵션을 사용하지 말라.
그리고 인스턴스 변수도 불필요하다. 이 두 속성은 numberOfSides의 값에 의해 결정될 것이다.
여기서는 정규 다각형(regular polygon)만 만들것임으로 각도(angles)의 값은 모두 똑같을 것이다.


7. name속성도 @synthesize 옵션을 사용할 필요가 없다. (인스턴스 변수도 필요없다.)
면의 갯수로부터 다각형의 이름을 출력하게 될 것이다.
<예>
면이 3일 경우: “Triangle”
면이 4일 경우: “Square”


8. PolygonShape 클래스의 -description 메소드를 아래 예와 같이 나오도록 구현하라.
Hello I am a 4-sided polygon (aka a Square) with angles of 90 degrees (1.570796 radians).


9. dealloc메소드를 사용하여 메모리 관리를 하고, dealloc이 불리워졌을때 로그를 출력하도록 하여라.


<힌트>


•다각형의 이름은 위키에서 찾을 수 있다.
•내각(angleInDegrees)을 구하기 위한 식은 다음과 같다. (180 * (numberOfSides - 2) / numberOfSides)
•삼각법(trigonometry): 360° 는 2π(파이) 이다.
•π(파이)의 값은 M_PI에 정의되어 있다.

Section 6. 생성한 클래스 사용

WhatATool.m 파일에 #import "PolygonShape.h" 를 삽입한다.


중요!!! 여기서는 PolygonShape를 생성하기 위해 +alloc과 -init을 사용하도록 한다. 생성된 오브젝트는 배열에 넣도록 하고
사용이 끝난 후엔 메모리 관리 기술을 이용하여 오브젝트를 릴리스 하도록 한다.


1. alloc/init를 사용하여 mutable array를 생성하라.


2. 아래 값을 사용하여 3개 또는 그 이상의 PolygonShape 오브젝트를 생성하라.

Min number of sides Max number of sides Number of sides
 3  7  4
 5  9  6
 9  12  12

3. 생성한 오브젝트를 배열에 추가하고 description을 이용하여 로그를 출력하라. 최소한 3줄의 로그가 찍여야 한다.

4. polygon 오브젝트의 제약을 테스트 해본다.
루프를 돌며 numberOfSides에 10을 세팅해보라. 위의 테이블을 이용해 만든 오브젝트라면 두줄의 로그가 찍힐것이다.

5. polygon 오브젝트가 메모리로부터 릴리스 되었는지 확인한다.
주어진 규칙대로 생성한 클래스라면 dealloc이 불리면서 3번의 로그가 찍힐 것이다.


<시도>

우선 name의 getter를 구현하기 위해 다각형의 이름을 찾아봤다.

Polygon names

Name Edges
digon 2
triangle (or trigon) 3
quadrilateral (or quadrangle or tetragon) 4
pentagon 5
hexagon 6
heptagon 7
octagon 8
enneagon (or nonagon) 9
decagon 10
hendecagon 11
dodecagon 12

<구현한 소스>

PolygonShape.h +-----+-----+-----+-----+-----+

//

//  PolygonShape.h

//  WhatATool

//

//  Created on 09. 12. 14.

//  Copyright 2009 __MyCompanyName__. All rights reserved.

//

#import

@interface PolygonShape : NSObject {

intnumberOfSides;

intminimumNumberOfSides;

intmaximumNumberOfSides;

}

@propertyintnumberOfSides;

@propertyintminimumNumberOfSides;

@propertyintmaximumNumberOfSides;

@property (readonly) float angleInDegrees;

@property (readonly) float angleInRadians;

@property (readonly) NSString *name;

//헤더에 이 메소드를 추가하는걸 까먹어서 에러가 났었다.

- (id)initWithNumberOfSides:(int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max;

@end

PolygonShape.m +-----+-----+-----+-----+-----+

//

//  PolygonShape.m

//  WhatATool

//

//  Created on 09. 12. 14.

//  Copyright 2009 __MyCompanyName__. All rights reserved.

//

#import "PolygonShape.h"

@implementation PolygonShape

@synthesize numberOfSides;

@synthesize minimumNumberOfSides;

@synthesize maximumNumberOfSides;

//synthesize선언한변수지만 setter존재하면 getter생성됨으로마음놓고써도된다.

-(void)setNumberOfSides:(int)newNumberOfSides {

    //numberOfSides최소값과최대값의사이값만가질수있다

    if(newNumberOfSides > maximumNumberOfSides) {

        //maximumNumberOfSides 5설정되어있는데 numberOfSides 9세팅하려고한다면에러로그를출력하라.

        NSLog(@"Invalid number of sides: %d is greater than the maximum of %d allowed", newNumberOfSides, maximumNumberOfSides);

    } elseif (newNumberOfSides < minimumNumberOfSides) {

        NSLog(@"Invalid number of sides: %d is less than the minimum of %d allowed", newNumberOfSides, minimumNumberOfSides);

    } else {

        numberOfSides = newNumberOfSides;

    }

}

//minimumNumberOfSides 2보다커야한다.

-(void)setMinimumNumberOfSides:(int)newMinimumNumberOfSides {

    if (newMinimumNumberOfSides < 2) {

    NSLog(@"Invalid minumum number of sides: %d is less than 2 allowed", newMinimumNumberOfSides);

} else {

    minimumNumberOfSides = newMinimumNumberOfSides;

}

}

//maximumNumberOfSides 12보다작아야한다.

-(void)setMaximumNumberOfSides:(int)newMaximumNumberOfSides {

    if (newMaximumNumberOfSides > 12) {

NSLog(@"Invalid maximum number of sides: %d is greater than 12 allowed", newMaximumNumberOfSides);

} else {

maximumNumberOfSides = newMaximumNumberOfSides;

}

}

//4. 초기화메소드를생성하라.

//주의! numberOfSides를 Max Min보다 먼저 세팅하려고 Max Min값이 0으로 인식되어 조건에서 튕겨나간다.

-(id)initWithNumberOfSides:(int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max {

[selfsetMinimumNumberOfSides:min];

[selfsetMaximumNumberOfSides:max];

[selfsetNumberOfSides:sides];

returnself;

}

//5. 슈퍼클래스인 NSObject init메소드를오버라이드하여아래와같은디폴트값을설정하는커스텀 init생성하라.

-(id)init {

if (self = [superinit]) {

    self = [selfinitWithNumberOfSides:5minimumNumberOfSides:3maximumNumberOfSides:10];

}

returnself;

}

//내각

-(float)angleInDegrees {

return (180 * (self.numberOfSides - 2) / self.numberOfSides);

}

//라디안

-(float)angleInRadians {

returnM_PI / 180 * self.angleInDegrees;

}

//7. 면의갯수로부터다각형의이름을출력하게것이다.

-(NSString *)name {

    switch ([selfnumberOfSides]) {

case2: return@"digon"; break;

case3: return@"triangle"; break;

case4: return@"quadrilateral"; break;

case5: return@"pentagon"; break;

case6: return@"hexagon"; break;

case7: return@"heptagon"; break;

case8: return@"octagon"; break;

case9: return@"enneagon"; break;

case10: return@"decagon"; break;

case11: return@"hendecagon"; break;

case12: return@"dodecagon"; break;

default: return@"";

}

}

//8. description오버라이드

//: Hello I am a 4-sided polygon (aka a Square) with angles of 90 degrees (1.570796 radians).

-(NSString *)description {

return [NSStringstringWithFormat: @"Hello I am a %d-sided polygon (aka a %@) with angles of %.0f degrees (%.6f radians)."

self.numberOfSides, self.name, self.angleInDegrees, self.angleInRadians];

}

//9. dealloc메소드를사용하여메모리관리를하고, dealloc불리워졌을때로그를출력하도록하여라.

- (void)dealloc {

NSLog(@"dealloc called");

[superdealloc];

}

@end

WhatATool.m의 함수(Section 6) 부분 +-----+-----+-----+-----+-----+

//#import "PolygonShape.h" 를 잊지말자


//Section 6

void PrintPolygonInfo() {

    NSLog(@"----- Section 6 -----");


    //배열 생성

NSMutableArray *array = [[NSMutableArrayalloc] init];

PolygonShape *polygon1 = [[PolygonShapealloc] initWithNumberOfSides:4minimumNumberOfSides:3maximumNumberOfSides:7];

PolygonShape *polygon2 = [[PolygonShapealloc] initWithNumberOfSides:6minimumNumberOfSides:5maximumNumberOfSides:9];

PolygonShape *polygon3 = [[PolygonShapealloc] initWithNumberOfSides:12minimumNumberOfSides:9maximumNumberOfSides:12];

    //생성한 다각형 정보를 로그에 출력하고 배열에 다각형 오브젝트를 추가한다.

NSLog([polygon1 description]);

[array addObject:polygon1];

NSLog([polygon2 description]);

[array addObject:polygon2];

NSLog([polygon3 description]);

[array addObject:polygon3];

//제약을 테스트하기 위해 numberOfSides에 10을 넣어본다.

for (PolygonShape *polygon in array) {

polygon.numberOfSides = 10;

}

[polygon1 dealloc];

[polygon2 dealloc];

[polygon3 dealloc];

[array dealloc];

}

<결과>

2009-12-17 14:54:31.297 WhatATool[1125:10b] ----- Section 6 -----

2009-12-17 14:54:31.297 WhatATool[1125:10b] Hello I am a 4-sided polygon (aka a quadrilateral) with angles of 90 degrees (1.570796 radians).

2009-12-17 14:54:31.297 WhatATool[1125:10b] Hello I am a 6-sided polygon (aka a hexagon) with angles of 120 degrees (2.094395 radians).

2009-12-17 14:54:31.297 WhatATool[1125:10b] Hello I am a 12-sided polygon (aka a dodecagon) with angles of 150 degrees (2.617994 radians).

2009-12-17 14:54:31.298 WhatATool[1125:10b] Invalid number of sides: 10 is greater than the maximum of 7 allowed

2009-12-17 14:54:31.298 WhatATool[1125:10b] Invalid number of sides: 10 is greater than the maximum of 9 allowed

2009-12-17 14:54:31.298 WhatATool[1125:10b] dealloc called

2009-12-17 14:54:31.299 WhatATool[1125:10b] dealloc called

2009-12-17 14:54:31.299 WhatATool[1125:10b] dealloc called

The Debugger has exited with status 0.



출처 : http://blog.naver.com/PostView.nhn?blogId=katchup00&logNo=10076162791
Posted by 오늘마감

댓글을 달아 주세요

오브젝트C2010. 6. 22. 09:54
[Objective-C]Interface Builder 기본 사용

Interface Builder를 사용하여 간단한 HelloWorld프로그램을 제작해 보았다. 이제부터는 Iphone 시뮬레이터를 사용한다.

새로운 프로젝트 생성 창이다. 여기서 iPhone OS를 선택해주고, Application을 선택해주면 상단과 같은 목록이 뜨는데 Window-based Application을 선택해 준다. 종류별 간단한 설명을 하자면 다음과 같다.

* Navigation-Based : 내비게이션 컨트롤러를 사용하는 응용프로그램으로 대표적인 예는 주소록이다.

* OpenGL ES : 게임과 같은 OpenGL 그래픽 기반의 응용프로그램

* Tab Bar : 탭 바를 사용하는 응용프로그램. 아이팟 프로그램이 대표적

* Utility : 앞뒤면이 있는 응용프로그램. 예로 주식 프로그램

* View-Based : 뷰 기반 프로그램. 뷰에 그림을 그리고 윈도우에 뷰를 표시한다.

* Window-Based : 메인 아이폰 윈도우만 가지고 시작하는 프로그램. 이 메인 윈도우에서 어느 프로그램이든 시작할 수 있다.

Window-based Application을 선택해주고 프로그램 이름을 정해주면 다음과 같이 기본 세팅이 된다. 여기서 프로그램 이름을 example_1로 해 주었기 때문에 다음과 같이 설정되어 기본 세팅 된 화면이다.

example_1AppDelegate.h 의 코드에 내용을 추가한 모습이다. 추가 내용으로는 UILabel *label 을 추가하고 property에도 label을 추가한 모습이다.

이 Delegate 클래스는 버튼을 누르거나 슬라이더를 움직이는 식의 아이폰 윈도우에서 일어나는 액션에 응답하는 메소드 들이 작성된다. 인터페이스 빌더와 대응하여 각각의 컨트롤들에 대응하는 메소드들이 작성된다. 또한 아이폰 윈도우에 있는 컨트롤들의 값에 대응하는 변수도 포함하게 되는데 이를 아웃렛(Outlet)이라고 한다.

여기서 btnClick은 버튼 컨트롤이 클릭되었을때 대응하는 메소드가 된다. UILabel의 경우 버튼이 클릭 되었을 때 화면에 정보를 뿌려주기 위한 객체이다.

example_1AppDelegate.m의 실제 구현 모습이다. @property로 설정된 내용을 @synthesize해주어 접근자를 생성해 준다.

또한 btnClick의 실제 구현을 해주는데 단순히 label에 텍스트를 넣어주는 것이다. 이외의 것은 건들지 않았다.

이제 인터페이스를 구성할 차례이다. 좌측 탭에서 Resources로 가보면 .plist와 .xib파일이 보일텐데 xib파일은 인터페이스 빌더 파일이다. 더블클릭을 하게 되면 인터페이스 빌더가 실행된다.

보는바와 같이 인터페이스 빌더가 실행된 모습이다.

상당히 생소한 모습으로 실제 인터페이스 빌더는 처음 써보았다.

좌측 창의 모습인데 라이브러리에 보게되면 각종 사용하게 될 컨트롤러들이 보이고 있다.

좌측창에서 Label을 선택하여 드래그한 후 중앙의 실제 iPhone화면 구성 창에 드래그 해준다.

이렇게 드래그 앤 드랍방식으로 화면을 구성할 컨트롤들을 배치할 수 있다.

화면과 같이 Label자체의 크기역시 조절 할 수 있다. 적절한 크기로 만들어 배치해 준다.

이제 좌측 창에서 Round Rect Button을 선택해 준다.

역시 드래그 하여 적절한 위치에다 놓아주면 배치는 종료된다.

버튼을 더블클릭하면 내용을 바꿀 수 있는데 더블클릭하여 버튼에 표시될 내용을 적어준다. Label역시 가능하며 버튼 또한 Label처럼 사이즈 조절이 가능하다.

이제부터 중요한 작업으로 3번째 창을보면 프로젝트명 Delegate가 보일것이다. 여기서는 example1로 프로젝트명을 했기 때문에 Example1 App Delegate가 보일것이다. 버튼의 액션을 할당해 주기 위해서 버튼에 control버튼을 누르고 드래그하여 Delegate로 끌고가면 파란색 선이 나오게 된다.

버튼을 띠게 되면 아까 선언해 줬던 btnClick이란 메소드가 보일 것이다. 이는 Delegate 클래스에 메소드 1개만 선언해 주었기 때문에 이렇게 나오는데 여러개를 선언해 주었다면 해당 목록에서 원하는 메소드를 찾아 선택하면 된다. 이로서 버튼이 클릭되면 수행할 메소드 할당이 끝났다.

이제 반대로 변수로 선언해 준 label객체가 무엇인지 할당해 주어야 한다. 3번째 창에서 Delegate를 control 드래그 하면 역시 파란선이 나오며 드래그 되는데 아까 배치해 두었던 label에 놓아준다.

아까와 마찬가지고 선언해 두었던 컨트롤들의 목록이 뜨게 되는데 1개만 선언해 주었기 때문에 label을 선택해 준다.

최종적으로 ui의 모습이다.

이제 interface builder를 저장하고 xcode에서 실행시키면 된다. 본인은 interface builder를 저장하지 않아서 정상작동하지 않아 고민을 많이 했다...

아이폰 시뮬레이터의 모습이다. 이제 버튼을 눌러보자

Hello World!라고 지정해 두었던 문자가 Label에 찍히는 것을 볼 수 있다.



출처 : http://blog.naver.com/PostView.nhn?blogId=khagaa&logNo=30085139048

'오브젝트C' 카테고리의 다른 글

Objective-C의 기본 문법  (0) 2010.06.22
Objective-C의 특징  (0) 2010.06.22
[Objective-C]Interface Builder 기본 사용  (0) 2010.06.22
[Objective-C]번들  (0) 2010.06.22
[Objective-C]메세지 포워딩  (0) 2010.06.22
[Objective-C]존  (0) 2010.06.22
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플정보2010. 6. 20. 23:17
아이폰 SMS 글자수 제한 사용 어플

우리의 아이폰은 단문문자메시지(SMS)를 보낼때

한국의 SMS기본 80바이트 제한을 알리는 기능이없습니다.

(단 KT쪽에서는 LMS 까지 무료라는데 LMS의 바이트 제한은 200kbyte 입니다)

(현재 멀티미디어를 넣은 MMS는 아이폰에서 무료입니다 .)

이글은 유용한 80바이트 단문을 쓰기위한 어플을 소개해드리겠습니다.

한국형 핸드폰이아닌 세계공용화 폰이기에 한국에만 특별하게 해줄수 없다는 것이였을까요?

애플에서도 아이폰의 기능을 SK처럼 자회사에 알맞게 변경하는것을 용납할수 없어서

KT에 자신들의 기기를 마음대로 수정못하게 해서랄까요?

뭐 어찌됐건 결과는 소비자 몫이죠.

KT에서 SMS 크기를 알려주는 기능이 있으면 좋을텐데 아니면 어플이라도 나왔어야 하는 겁니다.

그래서SMS과련된 유용한 어플 3개를 알려드리겠습니다.

위의 iFreeSMS, MoaSMS, ParanSMS입니다.

쓰는 법은 설명이 필요 하지 않을 정도로 무지 간단합니다.

말그대로 보통 핸드폰을 사용하셨다면 쉽게 간단하게 사용이 가능하겠지요.

다만

Moasms 경우 사이트에서 여러 사이트에서 제공하는 무료문자들을 긁어모아서

가입시킨뒤 문자를 보내는 기능이있으며.

파란sms는 메일 사용량에 따라 무료문자를 주는 기능이있습니다.



출처 : http://blog.naver.com/PostView.nhn?blogId=artsoflife&logNo=30076865835
Posted by 오늘마감

댓글을 달아 주세요