Objective-C

Dispatch

tama-tan
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // バックグランドでAPIなどを実行
});

dispatch_async(dispatch_get_main_queue(), ^{
    // メインスレッドで処理をしたい内容、UIを変更など。
});


dispatch_sync(dispatch_queue_create("test_sample", DISPATCH_QUEUE_SERIAL), ^{
    // 同期処理
});

遅延処理

tama-tan
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    // 処理内容
});
 - (void)doAfterDelay{
   // 処理内容
 }
 [self performSelector:@selector(doAfterDelay) withObject:nil afterDelay:1];

iOS(obj-c)の画面遷移

tama-tan

・コードでの遷移 ・StoryBoardのsegueを使った遷移 ・NavigationControllerを使った遷移

Present

[self presentViewController:移動先ViewController animated:YES completion:nil];

segue

[self performSegueWithIdentifier:@"セグエのID" sender:self];

Push

[self.navigationController pushViewController:移動先ViewController animated:YES];

Pop

指定ビューコントローラーへ

[self.navigationController popToViewController:viewController animated:YES];

前の画面に戻る

[self.navigationController popViewControllerAnimated:YES];
[self.navigationController popToRootViewControllerAnimated:YES];

StoryBoard

・StoryBoard ID

※storyboardファイルで ‘identify → StoryBoard ID’の入力が必要

iOS(obj-c)のセグエの戻り(push)

tama-tan

1つ前の画面に戻る


[self.navigationController popViewControllerAnimated:YES];

ルート画面まで一気に戻る

[self.navigationController popToRootViewControllerAnimated:YES];

任意の画面(UIViewController)まで戻る

[self.navigationController popToViewController:UIViewController animated:YES];

iOS(obj-c)でgetとPOST

tama-tan

GET

NSString *urlString = [NSString stringWithFormat:@"https://xxxxx.co.jp/test?key1=%@",key1];

    DLog(@"urlString:%@", urlString)

    NSURLSession *urlSession;
    NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
    sessionConfig.timeoutIntervalForRequest = 5;
    sessionConfig.timeoutIntervalForResource = 20;

    // 処理を単純化させるためにdelegateは使用しませんでした。
    // UI関連の処理を想定していないため、delegateQueueは独自に作成しました。
    urlSession = [NSURLSession sessionWithConfiguration:sessionConfig
                                               delegate:nil
                                          delegateQueue:nil];

    NSLog(@"get start");

    NSMutableURLRequest *request = [NSMutableURLRequest new];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
    [request setValue:@"YKTHttpClient" forHTTPHeaderField:@"User-Agent"];
    [request setHTTPMethod:@"GET"];

    // 取得するデータサイズが小さいのでtaskはNSURLSessionDataTaskを使用
    NSURLSessionDataTask *dataTask
            = [urlSession dataTaskWithRequest:request
                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                NSHTTPURLResponse *httpUrlResponse = (NSHTTPURLResponse *) response;
                                DLog(@"Status code: %ld", httpUrlResponse.statusCode);

                                CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef) [response textEncodingName]);
                                NSString *body = [[NSString alloc] initWithData:data encoding:CFStringConvertEncodingToNSStringEncoding(encoding)];
                                NSData *restoreData = [[NSData alloc] initWithBase64EncodedString:body options:0];

                                NSString *restoreString = [[NSString alloc] initWithData:restoreData encoding:NSUTF8StringEncoding];
                                dispatch_async(
                                        dispatch_get_main_queue(),
                                        ^{
                                            self.textView.text = restoreString;
                                        }
                                );
                            }];

    [dataTask resume];

POST


NSString *urlString =@"https://xxxx.co.jp/test";
    NSDictionary *params = @{
        @"name": name,
        @"uuid": uuid,
        };
    DLog(@"urlString:%@", urlString)

    // 連想配列として与えられたパラメータをクエリ文字列に変換する
    NSData *query = [self buildQueryWithDictionary: params];
    
    
    NSURLSession *urlSession;
    NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
    sessionConfig.timeoutIntervalForRequest = 5;
    sessionConfig.timeoutIntervalForResource = 20;

    // 処理を単純化させるためにdelegateは使用しませんでした。
    // UI関連の処理を想定していないため、delegateQueueは独自に作成しました。
    urlSession = [NSURLSession sessionWithConfiguration:sessionConfig
                                               delegate:nil
                                          delegateQueue:nil];

    NSLog(@"get start");

    NSMutableURLRequest *request = [NSMutableURLRequest new];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setCachePolicy:NSURLRequestUseProtocolCachePolicy];
    [request setValue:@"iOS" forHTTPHeaderField:@"User-Agent"];
    [request setHTTPMethod:@"POST"];
    [request setValue: @"application/x-www-form-urlencoded"  forHTTPHeaderField: @"Content-Type"];
    [request setValue: [NSString stringWithFormat: @"%lu", (unsigned long)[query length]]  forHTTPHeaderField: @"Content-Length"];
    [request setHTTPBody: query];
    
    // 取得するデータサイズが小さいのでtaskはNSURLSessionDataTaskを使用
    NSURLSessionDataTask *dataTask
            = [urlSession dataTaskWithRequest:request
                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                NSHTTPURLResponse *httpUrlResponse = (NSHTTPURLResponse *) response;
                                DLog(@"Status code: %ld", httpUrlResponse.statusCode);

                                CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef) [response textEncodingName]);
                                NSString *body = [[NSString alloc] initWithData:data encoding:CFStringConvertEncodingToNSStringEncoding(encoding)];
                                NSData *restoreData = [[NSData alloc] initWithBase64EncodedString:body options:0];

                                NSString *restoreString = [[NSString alloc] initWithData:restoreData encoding:NSUTF8StringEncoding];
                                dispatch_async(
                                        dispatch_get_main_queue(),
                                        ^{
                                        }
                                );
                            }];

    [dataTask resume];

UIButtonの文字の設定

tama-tan

UIButtonの文字の設定

ボタンの設定

UIButton をコード上で使用することで、ボタンを追加することができます。 追加する時に、各状態になった場合のボタンのタイトル、色などを指定することができます。