카테고리 없음2012. 5. 30. 13:30

앱을 제작하면서 서버와 값을 주고 받는 일이 많다.

(현재 내가 제작하는 앱은 값을 주고, 결과를 XML로 받는다.)


값을 주고 받기에 편하기 위해 ASIHTTP 라이브러리를 이용했다.


1. 라이브러리를 다운 받는다. 


http://allseeing-i.com/ASIHTTPRequest/


다운 받으면 Iphone용 프로젝트를 열어서 'External' 폴더와 'Classes' 폴더를 나의 프로젝트로 옮겨 넣는다.




옮긴후 'Tests' 폴더는 삭제한다.

테스트 한 결과 에러만 잔득 만들어 내고 필요 없다.


2. 프레임웍 추가

http://allseeing-i.com/ASIHTTPRequest/Setup-instructions

여기에도 나와있듯이 아래와 같은 프레임웍을 추가한다.


CFNetwork.framework

SystemConfiguration.framework

MobileCoreServices.framework,

CoreGraphics.framework 

libz.1.2.3.dylib

libxml2.dylib


3. Header Search Paths 추가


${SDK_DIR}/usr/include/libxml2




4. 이후 코딩은 http://allseeing-i.com/ASIHTTPRequest/How-to-use 이곳 참고하면 된다.


5. 값을 보내고 받은 xml은 NSString 형태로 받게 되고, 아래와 같이 xml로 바꿔서 파싱해주면 된다.

(NSString 으로 받은걸 좀더 쉽게 파싱하는 방법이 있으면 좋으련만, 서치한걸로는 이 방법이 최선이라 생각된다.)


NSData *data = [response dataUsingEncoding:NSUTF8StringEncoding];

NSXMLParser *xmlParser = [[NSXMLParser allocinitWithData:data ];


6. xml 파싱은 NSXMLParser 이용하면 된다. 따로 포스트 할 예정이다.

(많이 복잡한 xml이라면 다른 라이브러리를 사용하겠지만 결과로 받은 xml은  짧으므로 기본 클래스를 이용할 예정)

Posted by 다오나무
영삼이의 IT정보2012. 4. 28. 16:46

xcode 4.2를 사용하다가 4.3을 사용하니 MainWindow.xib 가 없어서

MainWindow.xib 를 사용하여 프로젝트를 시작하는 방법을 정리한다.


  • xcode 4.3 empty project로 새 프로젝트를 생성
  • NewFile → User Interface → Window → ... → MainWindow 로 저장
  • AppDelegate.h 파일에 아래와 같이 IBOutlet을 추가
    • @property (strong, nonatomic) IBOutlet UIWindow *window;
  • MainWindow.xib 를 클릭하여 Interface Builder 에서 아래와 같이 작엄
    • Objects 항목에다가 우측 Library에서 Object를 끌어다 놓기
    • Objects 항목에다가 우측 Library에서 Window 끌어다 놓기
    • 끌어다 놓은 Object 선택하고 Identity Inspector 에서 Class 를 해당하는 xxxAppDelegate 로 변경
    • File's Owner 선택하고 Identity Inspector 에서 Class 를 UIApplication 으로 변경
      • File's Owner 선택하고 Connections Inspector 에서 Outlets 의 delegate를 xxx App Delegate 로 연결
      • Objects에서 xxx App Delegate 를 선택하고 Connections Inspector 에서 rootController, window를 연결
        • 여기서 rootController 는 사용하고자 하는 ViewController 를 미리 만들어 놓아야 함(아래 그림에서는 TabBarController)
    • Project Targets 세팅에서 Main Interface를 MainWindow로 적어준다
    • AppDelegate.m 의 초기 코드를 아래와 같이 변경 (window를 위에서 IBOutlet으로 변경했으므로 alloc 제거)
      • //self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

        // Override point for customization after application launch.

        //self.window.backgroundColor = [UIColor whiteColor];


        self.window.rootViewController = rootController;

        [self.window addSubview:rootController.view];


        [self.window makeKeyAndVisible];


    ※ 위 방법은 Beginning iPhone4 Development 책에서 사용하는 방식을 Xcode 4.3 에서 세팅하는 것이다.

    꼭 위와 같이 시작할 필요는 없으며, 시작하는 코드에 ViewController를 alloc 하여 AppDelegate가 멤버로 가지고 있는 window에 rootController로 지정해서 시작해도 될 것이다. 해당 ViewController 의 viewDidLoad 등의 함수에서 초기 화면을 세팅하면 된다.

    Posted by 다오나무
    카테고리 없음2012. 3. 14. 11:03

    @interface TESTAppDelegate : NSObject <UIApplicationDelegate> {

     

     

    NSString *DBNAME;

    NSString *DBPATH;

     

    }




    -- m파일 





        NSFileManager *fileManager = [NSFileManager defaultManager];

        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

        NSString *documentsDirectory = [paths objectAtIndex:0];    

        NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent: @"Store.sqlite"];

    self.DBPATH = writableDBPath;

    NSLog(@"writableDBPath is %@", writableDBPath);

        

        BOOL dbexits = [fileManager fileExistsAtPath:writableDBPath];

        if (!dbexits) 

        {

    NSLog(@"데이터베이스 카피");

            // 데이터베이스가 존재하지 않으면, 어플리케이션 Resource아래에서 복사를 한다

            NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Store.sqlite"];

            NSError *error;

            BOOL success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];

        }    

       else {

    NSLog(@"이미 패스가 잇음");

        }

    별짓다했네... 3시간동안 강제로 Path따서 햇지만 읽히는건 읽혀지지만... insert 안되서...
    완전 제일 중요한거!!! /Documents <--요놈안에있는놈만 수정이 가능하다!!

    Posted by 다오나무
    카테고리 없음2012. 3. 12. 15:26

    - (NSString *)stringFromTimeInterval:(NSTimeInterval)interval {

        NSInteger ti = (NSInteger)interval;

        NSInteger seconds = ti % 60;

        NSInteger minutes = (ti / 60) % 60;

        NSInteger hours = (ti / 3600);

        return [NSString stringWithFormat:@"%02i:%02i:%02i", hours, minutes, seconds];

    }

    Posted by 다오나무
    영삼이의 IT정보2011. 10. 5. 23:43
    뷰의 추가 또는 삽입  
    [self.view insertSubview:viewController.view atIndex:0];

    [self.view addSubview:viewController.view]; 

    [self presentModalViewController:viewController animated:YES];  --> 앤 모달뷰

    [self.navigationController pushViewController:addView animated:YES]; 

    뷰의 순서 바꾸기
    [self.view bringSubviewToFront:self.tempViewController.view]; 
    -> tempViewController.view를 가장 앞으로 이동한다. 

    [self.view sendSubviewToFront:self.tempViewController.view]; 
    -> tempViewController.view를 가장 뒤로 이동한다. 

    [self.view exchangeSubviewAtIndex:0 withSubviewAtIndex:2]; 
    -> 0번 뷰와 2번뷰의 위치를 바꾼다 
       위에서 insertSubView .... atIndex로 뷰의 번호를 지정하면 view가 쌓인다 
       이 순서를 변경할수 있다. 
       주위 해야 할것은 Atindex:number로 뷰를 넣을 경우 해당 뷰가 number로 계속
       지정 되는 것이 아니라 이동후에는 각각의 위치 번호로 된다. 
    예) 
    [self.view insertSubview:oneController.view atIndex:0];
    [self.view insertSubview:twoController.view atIndex:2];
    [self.view insertSubview:threeController.view atIndex:2];
    --> 이때는 onController.view가      0     
              twoController.view가     1  
              threeController.view가   2   이다. 
    여기서 
    [self.view exchangeSubviewAtIndex:0 withSubviewAtIndex:2];  하면
    onController.view가      2     
    twoController.view가     1  
    threeController.view가   0  이 된다. 즉 할당된 번호가 계속 따라 다니는 것이 아니라 
    최최 지정 할때만 적용 되며 변경 후에는 뷰스택(?)에 샇인 번호로 바뀐다. 
    이거 몰라서 3일 버렸다 왜 원하는 대로 안나올까 하고.... 바보 같이.. 
    --> 아직까지는 그렇게 알고 있다. 나두 아이폰 관련 개발 공부 한지 인자 몇일 안되서 
        틀린 정보 일수도 있다. 

    뷰 스택 로그 찍기 
    NSLog([[self.view subviews] description]); 
    -> 뷰가 쌓여 있는 스택(?) 순서를 콘솔로 볼수 있다.  
       로그를 볼때는 view에 tag로 번호를 지정한다음에 보면 콘솔에 해당 tag가 나와서 
       한결 보기 편하다. 

    뷰 addSubview:뷰

    뷰 inserSubview뷰 atIndex:번호

    컨트롤러 pushViewController:컨트롤러 애니옵션

    컨트롤러 presentModalViewController:컨트롤러 애니옵션

    '영삼이의 IT정보' 카테고리의 다른 글

    APM UTF-8 설정  (0) 2011.10.21
    UITableViewCellStyle 종류  (0) 2011.10.19
    윈도우폰이 가져오는 생각의 변화  (0) 2011.09.28
    애플, 아이폰 기자 회견 10월 4일 개최!  (0) 2011.09.28
    딜라이트샵 구경  (0) 2011.09.27
    Posted by 다오나무