출처 - http://www.cocoadev.co.kr/185




이번에는 CoreData를 이용하는 간단한 샘플을 만들어 보겠습니다. 이전에 Xcode 2.*대에서 이와 비슷한 어플리케이션을 만드는 "간단한 ToDo 어플리케이션 만들기"란 포스팅을 한적이 있습니다. 소스코드에 추가 없이 마우스 클릭만으로 간단히 만드는 예제였는데 Xcode 3에서는 그 마우스 클릭도 최소한으로 줄이고 자동화여, 누구나 쉽게 간단한 어플리케이션을 만들 수 있습니다.

Core Data에 대한 자세한 내용은 아래의  ADC 문서들을 참조하시기 바랍니다.



1. 프로젝트 생성
Xcode를 실행하고 새로운 프로젝트를 생성하기 위해 메뉴에서 File / New Project.. 를 클릭합니다. 아래와 같이 Mac OS X / Application 항목에서 Core Data Document-based Application을 선택하고 Choose...를 클릭합니다.
프로젝트 명에 'BookList'를 입력하고 save 버튼을 클릭하여 완료합니다.


2.  Data Model
1) Data Modeling tool
좌측과 같이 Xcode의 Groups & Files아래에 BookList / Models에서 MyDocument.xcdatamodel을 더블클릭합니다.

아래와 같은 데이터 모델링 툴이 오픈됩니다.
2) Entity 추가
위의 이미지에서 붉은색 화살표가 가르키는 Entity 항목 하단의 + 버튼을 클릭하여 새로운 Entity를 추가합니다. 생성된 항목을 더블클릭하거나 우측의 설정창에서 Name: 항목의 입력창을 이용하여 아래와 같이 'Books'로 이름을 변경합니다.


3) Attribute 설정
* 추가
이제 Books에 속성(Attribute)를 추가합니다. Property창 하단의 + 버튼을 클릭하여 나오는 항목중 Add Attrribute를 클릭합니다. 2번 더 반복하여 3개의 속성을 생성합니다.

* 설정
속성들의 이름을 각각 titile, writer, press로 입력하고 아래와 같이 항목들을 설정합니다.




3. 인터페이스 빌더
Xcode에서 MyDocument.xib를 더블클릭하여 인터페이스 빌더를 오픈합니다. 먼저 윈도우에 기본으로 생성되어 있는 "Your document contetents here'  라벨을 삭제합니다.

그리고 라이브러리 윈도우의 Cocoa / Objects & Controllers / Core Data 항목에서 좌측과 같은 Core Data Entity를 드래그하여 윈도우로 가져다 놓습니다.



1) Core Data Entity 생성
윈도우로 드래그를 완료하면 설장창이 오픈됩니다. 아래와 같이 entity를 Books로 선택하고 Next 버튼을 클릭하고 각 단계별로 아래와 같이 진행합니다.
2) 윈도우 크기 조절
생성된 항목에 맞추어 아래와 같이 윈도우의 크기를 적당히 조절합니다.

4. Build & Test
현재까지의 작업만으로 기본적인 동작을 수행할 수 있는 작업이 완료되었습니다. 이제 빌드를 하고 어플리케이션을 실행하여 테스트 합니다.
어플리케 이션이 실행되면 등록, 변경, 삭제, 검색 등과 파일 저장/오픈이 동작하는지 확인합니다.





출처 : http://blog.naver.com/PostView.nhn?blogId=seogi1004&logNo=110085700513
Posted by 오늘마감
[아이폰 앱 개발] webView를 이용해서 간단한 웹브라우져 만드는 방법

iPhone Coding – Learning About UIWebViews by Creating a Web Browser

Wow! It has been a long time since my last tutorial… As I wrote in my last post, I had to take a break due to my wife having our baby.  But, now I’m back and have a great tutorial for you guys.  

Today I will be showing you how to work with a  UIWebview to create a basic web browser.  Here is a screenshot of the app we are going to create.

Create a View-Based Application

Ok, so let’s get started.  Start by opening up Xcode and click File -> New Project.  Next select View-Based Application and click Choose… Name this project something like iCodeBrowser and click Save.  

Now we are ready to begin coding…

Create IBOutlets and IBActions

Before we create the interface for our web browser, we need to establish the IBOutles and Actions to interface with the UI elements in code.  Start by opening up iCodeBrowserViewController.h and add the following code:

Let’s take a look at this code line by line.  The first thing we added was the  to the end of our interface declaration.  This is telling the app that this class will be the delegate for our UIWebview.  

What does it mean to be the delegate you ask? Great question… A delegate is like a handler.  It is responsible for implementing certain methods in order to handle events sent by the object they are the delegate for.  So in our example, we are simply saying that we will implement some of the functionality of the UIWebView.  This is needed so we can capture certain actions of the UIWebView such as a click on a link or so we can tell when a page has started/finished loading.  If it’s still unclear, ask me clarifying questions in the comments section.

Next, we see our 3 lines of declaring IBOutlets.  These are the UI elements that we will be interacting with.  In case you didn’t know, the UIActivityIndicator is the little spinner/loading animation that you see on various apps when content is loading.  We will be using this to show that a page is currently loading.

Following this code, there are 3 IBActions.  IBActions are functions that get called in response to a user interaction with the application (such as tapping a button).  For our basic browser, we are only offering 3 types of functionality.  gotoAddress which will take a user to the address they type in the address bar and goBack/Forward should be pretty self explanatory.  

Creating the User Interface 

Now, let’s create the interface using Interface Builder.  I am going to be showing you how to do this in the video below.

 

Implementing the IBActions

Now that we have our interface, let’s make the app function.  We need to implement our methods.  Open up iCodeBrowserViewController.m and add the following code.

We need to synthesize our properties to allow us to interact with them.  Synthesizing automatically creates “getter” and “setter” methods for our properties.  Next, let’s implement the viewDidLoad method.  This is where we will be loading our “homepage”.  Add the following code to the viewDidLoad method.

The viewDidLoad method gets called automatically by our application whenever this view first loads.  We can know for sure that it will get called, so we can put our initialization code here.

ADVERTISEMENT

 

The first thing we see is the urlAddress string.  This will be our “homepage”.   You can change this to any address you wish to start with.  Next, we build a URL object with our string.  We need to do this so we can make a web request.  Following this, we build our web request and load it into the webView.  This will display the homepage inside of our webview.  Finally, we set the text of the address bar to the homepage address.  This part is more for aesthetics to let the user know what page they are on.

Next, we implement the method that we connected to the UITextField’s DidEndOnExit method gotoAddress.  Add the following code:

This is similar to the code we wrote in the viewDidLoad method, except for the fact that we are getting our URL string from the address bar.  This method gets called when the user presses the “Go” button on the keyboard.  The last thing to note here is we call the [addressBar resignFirstResponder] method.  This simply tells the app to hide the keyboard when this method gets called.

The implementation of our Back and Forward methods are pretty easy.  Go ahead and add the following code.

UIWebViews are pretty cool because of the functionality they offer us built right in to them.  We simply call[webView goBAck] to go back and [webView goForward] to go forward.  This greatly simplifies the interactions with the webview.  If we were to code that functionality from scratch, we would have to create a stack of URLs and continually push and pop them off the stack to keep track of where we need to go.  Thanks Apple for not making us implement this.

Finally, we need to implement the delegate methods for UIWebview.  These methods allow us to write our own code to respond to actions by the UIWebview.  The first methods we will implement are the webViewDidStartLoad and the webViewDidFinishLoad methods.  We will use these to show and hide the activity indicator. Add the following code:

So when the request is first made for a ULR (before the page starts loading) the webViewDidStartLoad method gets called automatically.  We use this opportunity to start our activity indicator to let the user know the page is loading.  If you don’t have something like this, it simply feels like the app is frozen when in fact, it’s just loading the page.  Finally, the webViewDidFinishLoad method gets called when the page is fully loaded.  After this, we can stop the indicator (and it automatically hides itself).

The very last thing we need to do is define what happens when a user clicks on a link. Add the following method:

This method gets called automatically whenever the user clicks a link.  This method can be very useful if you want to make a native iPhone application that integrates with a web app.  You can use this method to trap the user’s clicks and have your application respond to web links that get clicked.  In our case, we need it to do 2 things.  The first is to set the text of the address bar to the URL of the link that was clicked on and to load that address into the webview.

One thing to make note of: We do a check to see if the URL scheme is “http”. This is to ensure that the user typed http before their URL.  You can add an else statement here that auto prepends the http if the user did not add it.  This would allow you to type in a url such as “icodeblog.com” rather than having to type “http://www.icodeblog.com”.  I chose to omit it for this tutorial.

Remember, all of this added functionality of a UIWebView can only be gotten if you tell your class that it implements the UIWebViewDelegate protocol as we did in our .h file.

The app should be complete! Click on Build and Go to see this baby in action.  Remember, you must put “http://” in front of your URL’s.  

I hope you have enjoyed this tutorial.  If you have any questions or comments, feel free to leave them in the comments section of this post.  You can download the source here . Happy iCoding!

 

 

This entry was posted in Interface BuilderiPhone Programming Tutorials and tagged . Bookmark the permalinkPost a comment or leave a trackback: Trackback URL.
Posted by 오늘마감
오브젝트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 오늘마감
mapView위에 컨트롤을 올리는 간단한 방법

간단하다. 그냥 mapView아래에 두면된다.
쏘스상에서 신경안써도된다.

self.isPlaying=NO;

upCount=0;

downCount=0;

backwardCount=0;

forwardCount=0;

    // register for keyboard notifications

//[super viewDidLoad];

//self.frontView = [[UIView alloc]init];

//[self.view addSubview:self.frontView];

//mapView=[[MKMapView alloc]initWithFrame:CGRectMake(0, 0, 320, 320)];

mapView.showsUserLocation=TRUE;

mapView.mapType=MKMapTypeStandard;

mapView.delegate=self;

MKCoordinateRegion region;

MKCoordinateSpan span;

span.latitudeDelta=0.012;

span.longitudeDelta=0.012;

locationManager=[[CLLocationManageralloc] init];

locationManager.delegate=self;

locationManager.desiredAccuracy=kCLLocationAccuracyNearestTenMeters;

[locationManagerstartUpdatingLocation];   //Activate this line for having GPS tracking working

CLLocationCoordinate2D location2; //= mapView.userLocation.coordinate;

location2.latitude=45.43717;

location2.longitude=12.32688;

//location2.latitude=self.startLatitude;

//location2.longitude=self.startLongitude;

//self.label_curLon.text=[NSNumber  numberWithDouble:[self startLatitude]];

//self.label_curLat.text=[NSNumber numberWithDouble:[self startLatitude]];

//self.label_curLon.text=[[NSString alloc] initWithFormat:@"%d", [self startLatitude]];

//self.label_curLat.text=[[NSString alloc] initWithFormat:@"%d", [self startLongitude]];

region.span=span;

region.center=location2;

[mapViewsetRegion:region animated:NO];

//[mapView regionThatFits:region];

[self.frontViewinsertSubview:mapViewatIndex:0];

CLLocationCoordinate2D c;

NSString *latitude =  @"45.43700";

NSString *longitude = @"12.32516";

c.latitude = [latitude doubleValue];

c.longitude = [longitude doubleValue];

GPSAnnotation *annotation = [[GPSAnnotationalloc] initWithCoordinate:c];

annotation.currentPoint = [NSNumber numberWithInt:1];

annotation.mTitle=@"Point number 1";

[mapView addAnnotation:annotation];

[annotation release];

self.trace=[[NSMutableArrayalloc]init];

}

보다시피 viewDid, viewWillAppear에서 addSubView할 필요없다.


Posted by 오늘마감
아이폰 어플 간단한 코딩 따라해보기

과제B. WhatATool (Part I) (원본)

Objective-C의 문법은 스탠다드 C의 문법 + 약간의 Objective-C고유의 문법이라고 할 수 있으며 Objective-C자체는 많은 유용한 함수들을 제공한다.

여기서는 Objective-C의 기본 클래스들을 이용하여 간단한 로그를 찍어봄으로써 "코딩 맛보기"를 해본다.

1.Xcode를 기동하여 신규 프로젝트 생성에서 Command Line Utility > Foundation Tool 을 선택한다.

  (프로젝트 명은 WhatATool 이라고 해보자)

2.생선된 프로젝트 파일 일람중에 WhatATool.m을 열어본다.

  여기엔 이미 기본적으로 아래와 같은 main 함수가 만들어져 있다.

#import

int main (int argc, const char * argv[]) {

    NSAutoreleasepool * pool = [[NSAutoreleasePool alloc] init];
    NSLog(@"Hello World");

    [pool release];
    return 0;
}

이 상태로 실행해본다. 메뉴의 Build > Build and go 클릭.

성공했다고 나오지만 화면엔 아무 변화가 없다. Hello World는 어디에 찍히는 걸까? 로그파일?

정답은, 콘솔에 나온다.

콘솔은 메뉴의 Window > Console 을 클릭하면 보인다.

이제 이 프로젝트에 4가지 소스를 추가해보자.

<순서>

1.사용자 홈 디렉토리 찍어보기 (NSString 클래스 이용)

2.프로세스 ID 찍어보기 (NSProcessInfo 클래스 이용)

3.즐겨찾기 만들어보기 (NSMutableDictionary 클래스 이용)

4.Selector 의 이용과 Class 정보 보기

이 4가지 섹션에선 모두 NSLog 클래스를 이용하여 정보를 콘솔에 출력한다.

NSLog는 기본적으로 유저 메세지 앞에 시간, 프로세스명, 프로세스ID 등을 붙여준다.

   예 : 2008-09-23 13:49:42.275 WhatATool[360] Your message here.



출처 : http://blog.naver.com/PostView.nhn?blogId=katchup00&logNo=10075344314
Posted by 오늘마감
IBOulet 없이 델리게이트 구현하는 간단한 방법

출처 : http://cafe.naver.com/mcbugi.cafe?iframe_url=/ArticleRead.nhn%3Fclubid=16914752%26page=21%26searchtype=1%26query=delegate%26searchdate=all%26articlemedia=0%26sortby=date%26articleid=7177%26referrerAllArticles=true

이번 강좌에서 델리게이트 이론을 이해하실수 있도록 도와드리기 위해 델리게이트 구현법을 설명하겠습니다

"IB 없이 하기, UITableView끝장보기 (1) 델리게이트 구현이론"편에서 (http://cafe.naver.com/mcbugi/6676)

이미 감 잡으신 분도 있겠지만

그래도 이해 못하신 분들을 위해 설명해 보겠습니다.

아마 많은 분들이 고민하셨을거라 봅니다.

바로 객체간 데이터 통신입니다

예를 들어 객체 A와 B가 있습니다

A가 B에 데이터를 보내거나 함수를 호출하는건

A가 B를 하위로 소유하고 참조함으로서 간단히 B에 접근이 가능합니다 

그리고 B가 A를 호출 하려면 B에 A의 주소가 입력되어 있고 A를 참조해야지만 접근이 가능합니다

결국 A가 B를 쓰려면 B를 참조하는걸로 가능하지만 B가 A를 호출하려면 B가 A를 참조해야 합니다

좀 헤깔리나요;;;

결론은 A와 B가 서로 통신하려면 서로 참조해야 한다는 겁니다.

하지만 만약

A가 만든 ViewController이고 B가 UITableView이라면 서로 참조하는 방식은 불가능합니다

UITableView는 제공되는 API라서 UITableView의 헤더를 수정한다는건 불가능하기 때문이죠.

그래서 사용된것이 델리게이트 프로토콜 방법입니다

약속된 함수만 호출 하도록 하는거죠

하지만 여태껏 API에서 정의된 델리게이트만 사용해보고

직접 그쪽에서 어떻게 호출하는지 알수가 없습니다

즉 있는걸 써보기만 했습니다

그래서 이번에는 직접 델리게이트를 구현해보겠습니다

한번 간단한 게임을 만들어 보겠습니다

뭐가좋을까요.....

아 폭탄 해체 게임을 해보도록 하겠습니다.

우선 Window-Based로 새 프로젝트는 만듭니다

프로젝트명은 Boom이라 하죠

간단한 어플이 될것이니 ViewController까지 만들것 없이 뷰만 가지고 만들어 보겠습니다

뷰를 하나 만들고 시간 카운트 폭탄이 될것이니 

빨간선, 파랑선 버튼 두개 만들고 시간을 표시할 라벨뷰 

이렇게 세개의 뷰를 만듭니다

어플의 시작 위치인 AppDelegate에서 만든 BoomView를 넣어줍니다

BoomView입니다 우선 아무것도 없습니다


 lblTime만 만든 이유는 이 컨트롤만 나중에 계속 접근할 필요가 있기 때문입니다 (시간 표시)

init함수에서 lblTime과 두 번튼을 만들겠습니다

그리고 각각의 버튼이 눌러졌을때 각각 Red와 Blue함수가 호출되도록 했습니다

BoomView를 더 구현하기 전에 먼저 폭탄을 만들어야 겠죠

Bomb클래스를 NSObject로 만듭니다

정말 아무것도 없습니다.

우선 클래스의 구조를 구현하겠습니다

객체가 만들어지면 타이머를 설정하고 시간다 되면 폭파 시키겠습니다

우선 헤더에 다음 코드를 넣습니다

NSTimer *myTimer;

int timeCount;

@property 설정은 필요없습니다 안에서만 다룰거라


그리고 클래스 구현 파일에서 다음 코드를 넣습니다

- (id)init {

self = [superinit];
if (self != nil) {
timeCount = 10;
myTimer = [NSTimerscheduledTimerWithTimeInterval:1.0target:selfselector:@selector(chkTime) userInfo:nilrepeats:YES];
}
returnself;

}

- (void)chkTime {

timeCount--;
if (timeCount == 0) {
[myTimer invalidate];
myTimer = nil;

//
}

}


우선 timeCount를 10주고 시작합니다

그리고 매초마다 chkTime이 실행 되도록 설정했습니다

매초 실행 할때마다 카운트가 줄고 0이 되면 타이머는 끄도록 했습니다


그러고보니 어떤 선이 맞는건지 정하는걸 깜빡했군요


헤더에 Bomb 클래스 선언 전에 다음코드를 넣습니다

enum {

    BombLineRed = 0,

    BombLineBlue = 1,

};

typedef NSUInteger BombLineColor; 


이것은 int값과 같은것이지만 알아보기 쉽도록 했습니다

그리고 클래스 변수로 선언합니다

BombLineColor RightLine;



그리고 선을 자를때 호출되는 함수도 필요합니다

- (void)CutColor:(BombLineColor)Color;




 그리고 Bomb.m에서

초기화 함수 (init)에 아래 코드를 넣습니다

srandom(time(NULL));

RightLine = random() % 2;


 

그리고 새로운 함수를 추가합니다

- (void)CutColor:(BombLineColor)Color {

if (Color == RightLine) {
else {
}

}


맞을경우와 틀릴경우입니다만


아직 델리게이트 구현을 안했으므로 나중에 수정하겠습니다




여기서 잠시 정리해 보겠습니다

Bomb객체가 만들어지면 (init)

남은시간은 10초가 되고 (timeCount)

어느 선을 잘라야 폭탄이 멈추는지 설정합니다 (RightLine)

그리고 타이머가 작동합니다 (myTimer)


시간이 다 지나면 터질것이고 잘못 잘라도 터질것입니다

선을 자를때는 - (void)CutColor:(BombLineColor)Color;를 호출합니다





이제 본격적으로 델리게이트 구현을 해보겠습니다

 먼저 헤더에서

@protocol BombDelegate; 선언을 합니다

그리고

클래스 변수로 

id delegate;

를 선언합니다


이건 외부에서도 접근해야 하니 당연히 property선언이 되어 있어야 합니다

@property (nonatomic,assignid delegate;





헤더의 맨 밑에 다음 코드를 추가 합니다

@protocol BombDelegate<NSObject>

@end

아까 위에서 추가한것은 미리 정의한것으로 보시면 됩니다


이제 델리게이트가 호출할 함수들을 정의하면 됩니다


여기서 필요한것은


폭탄이 멈추거나 터졌을때 호출되는 함수와


매초 줄때마다 호출되는 카운트 함수, 이 두개가 필요 하겠군요

- (void)BombTimeCount:(int)count;

먼저 타임 카운트 입니다 간단히 몇초 남았나 count에 인자로 돌려줍니다

- (void)BombResponse:(Bomb *)Object Response:(BombResponseType)Response;

폭탄이 터지거나 멈출경우 호출되는 함수로 위와 같이 만들었습니다

Object 인자로 이 폭탄 객체의 주소를 돌려줍니다

Response는 터졌거나 멈췄거나 둘중 하나 입니다만

BombResponseType또한 BombLineColor처럼 int타입으로  정의했습니다

헤더 상단에 아래 코드를 넣어 줍니다

enum {

BombStoped = 1,
BombBoom = 2,

};

typedef NSUInteger BombResponseType;

그냥 0, 1 식으로 해도 상관없으나 기왕이면 알아보기 쉽게 하겠습니다


델리게이트 구현할때 특징중 하나가


반드시 필요한 함수와 있어도 되는 함수를 정의 할수 있다는겁니다



현재 사용할 함수는 위의 두개 입니다


그러나 남은 시간을 안보고 그냥 선을 자를수도 있습니다



그래서 BombTimeCount함수는 옵션으로 설정합니다


그래서 코딩하면...



다음과 같이 됩니다

@required가 반드시 정의될 함수들이고

@optional이 필수는 아닌 함수들입니다

헤더 정의는 끝났으니  Bomb.m을 수정해 보겠습니다


아까 헤더에서 delegate가 @property로 설정되었으니

@synthesize delegate; 코드를 넣어줍니다

우선 chkTime함수부터 고쳐 보겠습니다

먼저 초가 하나 줄면

BombTimeCount를 호출해서 알려줍니다


그래서 다음 코드를  timeCount--;다음에 넣어줍니다

[self.delegateBombTimeCount:timeCount];


하지면 여기서 문제가 있습니다

아까한 약속은 BombTimeCount함수가 필수가 아닌 @optional이라는 겁니다

그래서 상대 객체에서 이 함수를 구현을 안했을수도 있습니다


@optional으로 정의 했다고 컴파일러에서 알아서 해주는것이 아니기 때문에


구현이 안되었을 경우를 상정해서 코드를 적어야 합니다

상대 객체에 구현되었는지 확인하는 코드는 다음과 같습니다

[self.delegaterespondsToSelector:@selector(BombTimeCount:)]

여기서 주의하실점은 인자입니다


예를 들어

함수가 

- (void)test; 라면 @selector(test)

- (void)test:(int)a; 라면 @selector(test:)

- (void)test:(int)a b:(int)b; 라면 @selector(test:b:)
- (void)test:(int)a b:(BOOL)b c:(NSString *)c d:(NSNumber *)d e:(UIImage *)e  라면 @selector(test:b:c:d:e:)


가됩니다


인자와 마춰주지 않으면 문제가 됩니다


그래서 맞는 코드는 다음과 같습니다

if ([self.delegaterespondsToSelector:@selector(BombTimeCount:)] ) {

[self.delegateBombTimeCount:timeCount];

}


이제 시간이 0초일때 폭탄이 터지니

다음 코드를 그if문 사이에 넣어줍니다

[self.delegateBombResponse:selfResponse:BombBoom];


BombResponse의 경우 @required로 정의 하였으니 별도로 구현을 확인할 필요가 없습니다.


시간 카운트 쪽은 끝났습니다


이번에는 선을 잘랐을때 입니다


기존의 코드를 다음과 같이 수정합니다

- (void)CutColor:(BombLineColor)Color {

[myTimerinvalidate];
myTimer = nil;
if (Color == RightLine) {
[self.delegateBombResponse:selfResponse:BombStoped];
else {
[self.delegateBombResponse:selfResponse:BombBoom];
}

}


선을 자를때 타이머를 꺼줍니다 (어차피 자르면 둘중하나이니,,,)



이제 Bomb 객체구현은 끝났습니다


이제 BoomView에서 사용해 보겠습니다


먼저 객체를 참조하고 델리게이트 약속을 합니다


BoomView.h에서

#import "Bomb.h"

정의해줍니다


그리고 BoomView헤더를 다음과 같이 수정해서 프로토콜 약속을 합니다

@interface BoomView : UIView {

클래스 변수로 

Bomb *bomb;선언을 합니다

이제 BoomView.m에서


init(초기화) 함수에서 폭탄을 할당하고 초기화 합니다

bomb = [[Bomb allocinit];
bomb.delegate = self; 


그리고 아까 만든 약속한 함수 두개를 구현해 줍니다

- (void)BombResponse:(Bomb *)Object Response:(BombResponseType)Response {

if (Response == BombBoom) {
UIAlertView *alert = [[UIAlertViewallocinitWithTitle:@"Boom!"message:nildelegate:nilcancelButtonTitle:@""otherButtonTitles:nil];
[alert show];
[alert release];
else {
UIAlertView *alert = [[UIAlertViewallocinitWithTitle:@"해제됨"message:nildelegate:nilcancelButtonTitle:@""otherButtonTitles:nil];
[alert show];
[alert release];
}

}

- (void)BombTimeCount:(int)count {

lblTime.text = [NSStringstringWithFormat:@"남은시간 : %i",count];

}

폭탄이 어떻게 되냐에 따라 뜨는 메세지가 다르도록 했습니다


이번에는 선 자르는 코드입니다


아까 구현한 두 함수가 Red와Blue였습니다 그걸 다음과 같이 수정해줍니다

- (void)Red {

[bombCutColor:BombLineRed];

}

- (void)Blue {

[bombCutColor:BombLineBlue];

}


완성된 코드


이상으로 델리게이트 구현법을 마치겠습니다

여기까지 읽어 주셔서 감사합니다 ^^



출처 : http://blog.naver.com/PostView.nhn?blogId=74hans&logNo=110226436
Posted by 오늘마감
아이폰어플정보2010.06.29 20:31
간단한 아이폰 무료게임 농구공 던지기 - Arcade Hoops Basketball (아이폰 게임, 아이팟터치 게임, 추천 게임)

앱스토어 평점 : 3.5 / 5.0

앱스토어 연결 : 무료버전, 유료버전 0.99$

이 게임은 게임장(놀이터나 오락실)에서 종종 볼 수 있는 농구공 던지기 게임 아이폰 버전입니다.

메뉴 자체도 간단합니다. 그도 그럴것이 농구공 던져서 골대에 골인 시키는 것이 전부이기 때문이죠.

게임방법은 게임장에서 하던 농구공 던지기 게임 처럼 공을 잡고 던져서 골인 시키면 됩니다.

제한시간내에 얼마나 많이 골인시켰느냐에 따라 점수가 달라지는 아~주 간단한 게임입니다.

농구공을 터치(잡고) 농구골대로 드래그(던지기)해 보세요.

2~3번 하면 감을 익힐 수 있는데 집중해서 높은 점수를 얻어 봅시다.

버젓이 유료버전이 존재하는데 무료게임이라고 쓴 이유는 유료버전만의 메리트가 적기 때문입니다.

3단계 거리로 나눠진 농구골대와 월드랭킹보드에 등록할 수 있는 기능만으론 유료버전을 구입할 사람은 많지 않을겁니다.

차라리 무료로 풀고 AdMod 같은 광고수익을 노리는게 어땠을까 싶네요. (광고가 수익원인 Paper Toss

조만간 iOS 4.0 에서 iAD를 지원하면 무료로 풀리지 않을까 기대해 봅니다.

비슷한 방식 (터치&드래그로 던져서 골인시키는)의 게임이지만 Arcade Hoops Basketball 보다 더 재밌고 완전히 무료버전인 게임

재밌는 무료게임 Paper Toss (종이뭉치 던지기)

와 함께 짬나는 시간 재밌게 때워 봐요.

Posted by 오늘마감
아이폰기본사용2010.06.29 10:49
아이폰을 복원하는 간단한 방법

순정 상태에서 아이폰에 문제가 생기거나 혹은 탈옥/언락 후 필요에 의해서 복원 작업을 통해 초기 상태로 복구시킬 수가
있습니다. 아래 절차를 참조하세요. (만일 탈옥/언락한 후 벽돌 상태가 되었을 경우에는 강제 복원을 실행함)

1) 우선 여기를 참조하여 현재 본인의 아이폰에 해당하는 펌웨어를 컴으로 다운받아 복사해 놓는다.
   (이미 컴에 저장된 경우는 이 과정을 생략한다.)

2) 아이폰을 컴에 연결시킨 후 아이튠스를 실행시킨다.

3) 아래 그림처럼 Shift(맥의 경우 Option) 키를 누른 채 복원 버튼을 클릭한하다.
   (바로 복원 버튼만 클릭하면 자동으로 펌웨어를 검색하지만 위 방법이 훨씬 빠르다)



4) 아래의 팝업창에서 펌웨어 파일을 선택한 후 Open 버튼을 누른다. 



5) 복원하기 전에 백업할지 묻는 메시지가 나타나면 백업 옵션을 선택해도 되고 이미 백업한 경우에는 백업 안 함을 선택한다.



6) 아래 메시지가 나타나면 복원을 선택한다.



7) 복원 절차가 완료되면 아이폰이 재부팅되고 시작 중에 Apple 로고가 표시된다.



8) 복원 후에 "아이튠스에 연결" 화면이 나타나서 액티베이션(잠금 해제) 절차를 진행한다. "아이튠스에 연결" 화면이 사라지거나
   "iPhone이 네트워크 연결됨"이 나타날 때까지 계속 연결해 둔다. 아이튠스가 인터넷에 연결되어 있지 않으면 이 단계를
    완료할 수 없다.

 

9) 잠금해제 축하 메시지가 나온 후 아래 그림처럼 "다음 백업에서 복원" 옵션을 선택해 주면 기존의 데이터를 자동으로
    복구해 준다.

 


출처 : http://blog.naver.com/PostView.nhn?blogId=jkw1120&logNo=60096614137
Posted by 오늘마감
아이폰기본사용2010.06.23 21:18
통화종료하는 간단한 팁

아이폰 다 좋은데..

연락처같은거 정리하다가 실수로 자꾸 통화버튼을 누르게 되더라구요

친한친구면 몰라도 새벽에 학교 교수님께 전화하는 사태가 발생...-_-;;

처음에 모르고 홈버튼 눌렀다가 통화는 계속되고 홈화면으로 넘어가 버려서 안습..;ㅁ;

급할땐 빨간버튼은 왜이리 안눌리는지;

그럴땐 슬립버튼을 눌러보세요

깔끔하게 통화가 종료됩니다.

홈화면에 있을때도 종료됩니다~

(통화할때 스피커로 할때와 이어폰끼고 할때는 종료 안됩니다.

댓글보니 핸즈프리로 사용할때도 안되나 봅니다.

참고하세요^^)

 


출처 : http://blog.naver.com/PostView.nhn?blogId=neilwin&logNo=60104504121
Posted by 오늘마감
아이폰기본사용2010.06.23 21:16
특수문자 간단한 팁

아마도 아이폰 사용자매뉴얼에 다 나와있을법한 내용인데요, 이걸 다 정독한후 사용하는 유저보다는 저처럼 하나하나 몸으로 깨우쳐가며 사용하는 유저들이 더 많으실듯 하여 오늘 우연히 알게된 내용을 올려봅니다. 비슷한 내용이 팁게에 없더라구요..참고로 전 순정모드이며 일본어키보드 사용하지 않는 기본중의 기본키보드로 살고있습니다.

특수문자 버튼을 오래 누르고 계셔보세요 그럼 거기서 확장된 몇개의 특수문자들이 더 나옵니다. 예로 ? , ! 를 오래 누르고 있으면 각각이 거꾸로 된 물음표와 느낌표를 선택할수가 있게 되구요, \를 오래 누르면 다른 화폐단위 몇개를 더 선택할 수 있게 나옵니다. %도 누르면 뭐가 하나 더 나오는것 같고요.

모든 특수문자가 다 해당되는건 아니구, 그런게 몇개 잇더라구요.

정작 실생활엔 그닥 필요가 없다는....-_- 누르고 있음 하트나 별표 이런게 뜨길 기대하고 시작한 짓이었는데 말이죠..

 


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