PDA&Mobile2010. 3. 23. 15:07
* 본 포스트는 Blog.MissFlash.com에서 작성한 것으로, 원문 저작자의 동의없이 마음대로 퍼가실 수 없습니다. 포스트의 내용이 마음에 드시면 링크를 이용해주시면 감사하겠습니다.

> Head First iPhone Development #2

Chapter 2. iPhone app patterns - Hello @twitter!

App develop process
  1. Determine app layout
  2. Build the GUI
  3. Figure out how to use the controls
  4. Handle the data
  5. Send output to Twitter

The life of a root view
  1. Like in most other languages, main(...) gets called first.
  2. Main kicks off a Cocoa Touch Application.
  3. MainWindow.xib contains the connections for our application.
  4. The Cocoa Touch framework creates our custom view from the InstaTwitViewController.xib.
  5. When events occur with components, methods are invoked on our controller instance.

Development process
  1. First, declare that the controller conforms to both protocols(UIPickerViewDataSource, UIPickerViewDelegate).
  2. Next, add Mike's activities and feelings to the implementation file.
  3. The datasource protocol has two required methods(numberOfComponentsInPicerView:pickerView, pickerView:numberOfRowsInComponent).
  4. Connect the datasource just like actions and outlets.
  5. There's just one method for the delegate protocol(pickerView:titleForRow:forComponent).
  6. Add the IBOutlet and property to our view controller.
  7. Connect the picker to our outlet.
  8. Use our picker reference to pull the selected values(selectedRowInComponent).

@ vs. * : The "@" before those strings tells the compiler to make them NSString instead of char*. NSStrings are real Objective-C classes, as opposed to a simple C-style character pointer.

Added/Modified contents in .h file
@interface InstaTwitViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>

    IBOutlet UIPickerView *tweetPicker
    NSArray* activities;
    NSArray* feelings;

@property (nonatomic, retain) UIPickerView* tweetPicker;
- (IBAction)sendButtonTapped: (id)sender;

Added/Modified contents in .m file
@implementation InstaTwitViewController
@synthesize tweetPicker;

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
    return 2;

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
    if(component == 0)

        return [activities count];
        return [feelings count];

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger) component
    switch (component)

        case 0:
            return [activities objectAtIndex:row];
        case 1:
            return [feelings objectAtIndex:row];
    return nil;

- (IBAction)sendButtonTapped: (id)sender

    NSString* themessage = [NSString stringWithFormat:@"I'm %@ and feeling %@ about it.", [activities objectAtIndex:[tweetPicker selectedRowInComponent:0]], [feelings objectAtIndex:[tweetPicker selectedRowInComponent:1]]];
    //NSLog(@"Tweet button tapped!");

    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://ID:PW@twitter.com/statuses/update.xml"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
    [theRequest setHTTPMethod:@"POST"];
    [theRequest setHTTPBody:[[NSString stringWithFormat:@"status=%@", themessage] dataUsingEncoding:NSASCIIStringEncoding]];
    NSURLResponse* response;
    NSError* error;
    NSData* result = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error];
    NSLog(@"%@", [[[NSString alloc] initWithData:result encoding:NSASCIIStringEncoding] autorelease]);

- (void)viewDidLoad

    activities = [[NSArray alloc] initWithObjects:@"sleeping", @"eating", @"working", @"thinking", @"crying", @"begging", @"leaving", @"shopping", @"hello worlding", nil];
    feelings = [[NSArray alloc] initWithObjects:@"awesome", @"sad", @"happy", @"ambivalent", @"nauseous", @"psyched", @"confused", @"hopeful", @"anxious", nil];
    [super viewDidLoad];

- (void)dealloc

    [tweetPicker release];
    [activities release];
    [feelings release];
    [super dealloc];

이 글은 새로운 정보가 추가될 때마다 업데이트됩니다. 추천으로 아래 숫자에 1을 더해보세요. :)
RSS구독을 하시면 포스트를 배달해 드립니다. ▷ 한RSS 구독하기, 구글리더 구독하기

댓글을 달아 주세요

  1. achic

    너무 잘봣어용
    근데 지금 이코드 입력하면 안되는데 혹시
    이것을 막아놨기 때문인가요?

    2010.09.14 21:51 [ ADDR : EDIT/ DEL : REPLY ]
    • ID와 PW 대신에 자신의 아이디 및 비밀번호를 넣으셔야 합니다.

      API가 바뀌지 않았다면 정상적으로 작동할 겁니다. ^_^;

      2010.09.15 10:12 신고 [ ADDR : EDIT/ DEL ]
  2. 블루레전드

    생초보인데요. 저도 이 코드를 실행하니 콘솔에 에러가
    <error>Could not authenticate you.</error>
    이렇게 뜨거든요. ID, PW는 모두 정확하게 입력했는데 말이죠.
    말씀대로 트위터의 API가 바뀐걸까요?

    2011.09.13 20:11 [ ADDR : EDIT/ DEL : REPLY ]
    • 트위터 정책이 바뀌어서 아이디/패스워드를 직접 넣는 방식은 이제 지원하지 않을겁니다. 보안에 취약해서요...

      최근 문서를 참고하셔서 예제를 따라하셔야 할겁니다.

      2011.09.14 10:23 신고 [ ADDR : EDIT/ DEL ]