Developer/iOS

[iOS]WCSession으로 iWatch와 iPhone 데이터 주고 받기

블로blow 2016. 8. 2. 15:18
728x90

- ViewController.m : 아이폰에서 값을 보낼 화면에서 다음과 같이 하시면 됩니다.


#import <WatchConnectivity/WatchConnectivity.h>

@interface ViewController () <WCSessionDelegate>


@end


- (void)viewDidLoad {

    [super viewDidLoad];

    //WCSession을 activate합니다.

    if(WCSession.isSupported){

        WCSession* session = WCSession.defaultSession;

        session.delegate = self;

        [session activateSession];

    }

}

-(void)packageAndSendMessage{

    //보낼 Dictionary를 설정합니다.

    NSDictionary* request = "보낼 Dictionary";

    

    if(WCSession.isSupported){

        WCSession* session = WCSession.defaultSession;

        session.delegate = self;

        [session activateSession];

        if(session.reachable)

        {

            //sendMessage로 Dictionary를 전송합니다.

            [session sendMessage:request replyHandler: ^(NSDictionary<NSString *,id> * __nonnull replyMessage)

             {

                 dispatch_async(dispatch_get_main_queue(), ^{

                     NSDictionary* message = replyMessage;

                     NSString* response = message[@"response"];

                     if(response) {

                         NSLog(@"response = %@", response);

                     }

                     else {

                         NSLog(@"nil");

                     }

                 });

             }

                errorHandler:^(NSError * __nonnull error) {

                    dispatch_async(dispatch_get_main_queue(), ^{

                        NSLog(@"error = %@",error.localizedDescription);

                    });

                }

             ];

        }

        else

        {

            NSLog(@"Session Not reachable");

        }

        

    }

    else

    {

        NSLog(@"Session Not Supported");

    }

}




- InterfaceController.m

#import <WatchConnectivity/WatchConnectivity.h>

@interface InterfaceController() <WCSessionDelegate>
- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *, id> *)message replyHandler:(void(^)(NSDictionary<NSString *, id> *replyMessage))replyHandler
{
    if(message){
        NSString* command = [message objectForKey:@"보낸 Dictionary로 값을 가져오면 됩니다."];
        NSLog(@"command = %@", command);
    }
}

/**
 Standard WatchKit delegate
 */
-(void)sessionWatchStateDidChange:(nonnull WCSession *)session
{
    if(WCSession.isSupported){
        WCSession* session = WCSession.defaultSession;
        session.delegate = self;
        [session activateSession];
        
    }
}


728x90