Tag Archives: 아이폰

[iPhone] NSString URL 인코딩/디코딩

HTTP(GET, POST) 프로토콜을 이용하여 서버와의 통신을 할때는 문자열의 인코딩을 신경쓰게 될 수 밖에 없죠.

기존의 Ajax와 같은 웹 프로그래밍에서는 URLEncode, URLDecode와 같은 것을 많이 사용하게 되는데요 비슷한게 있나 찾아보았습니다.

결론부터 말하면 있더군요. 잘됩니다.

// 오리지널 메시지
NSString *original = @"Hello, Nice to meet you\nWelcome to my blog(http://theeye.pe.kr)";

// URL Encode
NSString *escaped = [original stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"escaped string :\n%@", escaped);

// URL Decode
NSString *decoded = [escaped stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"decoded string :\n%@", decoded);
2009-04-03 12:20:58.721 URLEncodeExample[342:20b] escaped string :
Hello,%20Nice%20to%20meet%20you%0AWelcome%20to%20my%20blog(http://theeye.pe.kr)
2009-04-03 12:20:58.723 URLEncodeExample[342:20b] decoded string :
Hello, Nice to meet you
Welcome to my blog(http://theeye.pe.kr)

[iPhone] 네트워크 상태 확인하기

정말인지, 새로운것을 배워 나가는 과정은 재미있고 흥미 진진한 일인 것 같습니다. 이번에는 네트워크 상태를 측정하는 방법입니다.

우선 다음의 헤더들을 포함하여 주어야 합니다.

[code]#import <SystemConfiguration/SystemConfiguration.h>
#import <netinet/in.h>[/code]

또한 이것만으로는 부족하고 SystemConfiguration 프레임워크를 추가하여야 합니다.
사용자 삽입 이미지이제 준비는 완료되었군요, 구글링 하면 많이 볼 수 있는 예제 소스를 한번 만들어 보겠습니다.

[code]- (void)applicationDidFinishLaunching:(UIApplication *)application {   
    NSLog(@”Connection status : %@”, [self connectedToNetwork] ? @”YES” : @”NO”);
    [window makeKeyAndVisible];
}

– (BOOL) connectedToNetwork {
    // 0.0.0.0 주소를 만든다.
    struct sockaddr_in zeroAddress;
    bzero(&zeroAddress, sizeof(zeroAddress));
    zeroAddress.sin_len = sizeof(zeroAddress);
    zeroAddress.sin_family = AF_INET;
   
    // Reachability 플래그를 설정한다.
    SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
    SCNetworkReachabilityFlags flags;
   
    BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
    CFRelease(defaultRouteReachability);
   
    if (!didRetrieveFlags)
    {
        printf(“Error. Could not recover network reachability flags\n”);
        return 0;
    }
   
    // 플래그를 이용하여 각각의 네트워크 커넥션의 상태를 체크한다.
    BOOL isReachable = flags & kSCNetworkFlagsReachable;
    BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
    BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection;
   
    return ((isReachable && !needsConnection) || nonWiFi) ? YES : NO;
}[/code]
네트워크 상태를 connectedToNetwork메서드를 호출하여 Boolean형태로 확인할 수 있습니다.
1164155321.zip