信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

LIST OF ARTICLES

記事一覧

  • テクログ

    Objective-C | Google Analytics SDK for iOS v3 で _sqlite3 エラー

    Mac,iPhone,Objective-C 全て利用歴6ヶ月の新米プログラマーが送る 自分が使って役立ったmethod&Tips集 参考場所はありますが単なるコピペを紹介してるわけではありません。 ちゃんと自前で作ってます。(謎のアピール) シリーズ第16弾です。 Google Analytics SDK for iOS v3 の実装とエラー対処についてです iOS版の実装は搦め手ですがわかりやすいのでコチラをどうぞ ■はやとも工業所 【iOS】Google Analytics iOS SDK v3をものすごく簡単に設置する方法 さて、本来ならこれで終わりです。 しかしどういうわけか、以下のようなエラーが出てしまいます。 Undefined symbols for architecture i386: "_sqlite3_bind_blob", referenced from: -[TAGDataLayerPersistentStoreImpl writeEntriesToDatabase:expireTime:] in libGoogleAnalyticsServices.a(TAGDataLayerPersistentStoreImpl.o) "_sqlite3_bind_int", referenced from: -[TAGDataLayerPersistentStoreImpl deleteEntries:] in libGoogleAnalyticsServices.a(TAGDataLayerPersistentStoreImpl.o) "_sqlite3_bind_int64", referenced from: ... ちょいちょいっと検索するとやっぱり、stackoverflowが出てきます。 Google Analytics SDK 3.0 _sqlite3 linker errors in iOS それによると、 GAI.hGAIDictionaryBuilder.hGAIFields.hGAILogger.hGAITrackedViewController.hGAITracker.hlibGoogleAnalyticsServices.a と一緒に libsqlite3.0 を Targets(General)->Linked Frameworks and Librariesへ追加すればOK マクロ方式であっても無くてもエラー出るのはどうしてか不明です。 サンプルはlibsqlite3.0使ってないけどエラーは出ないのに・・・。 これで終わるとほらコピペじゃんってなるので、ちょっと改造 サンプルではクラスが名固定でアクティブスクリーンに表示されてしまうので、 画面名を任意に変える方法について。 Xcodeのマクロ情報が少なくてどこ調べればいいかわからないのですが、見よう見まねで修正してます 一番下から2行目をコピーして、画面名を引数で貰うようにします。 クラス名が表示したい場合は今まで通りの書き方でクラス名が表示可能です。 ○○-Prefix.pch #define GA_TRACK_CLASS  GA_TRACK_PAGE(NSStringFromClass([self class])); #define GA_TRACK_CLASS_PAGE(page, ...)  GA_TRACK_PAGE(page);  // ページごとの画面名 #define GA_TRACK_METHOD GA_TRACK_EVENT(NSStringFromClass([self class]), NSStringFromSelector(_cmd), @"", nil); 抜粋してます ViewController.m - (void)didReceiveMemoryWarning {     [super didReceiveMemoryWarning];     // Dispose of any resources that can be recreated. } - (void)viewDidAppear:(BOOL)animated {     // GoogleAnalyticsServices     GA_TRACK_CLASS_PAGE(@"最初の画面"); // 画面名を指定 } どなたかXcodeのマクロの書き方がわかりやすく載ってるサイト教えてくださいw そのほかのObjective-C関連の記事をお探しならコチラをどうぞ 今週か来週あたりに新アプリリリースします。ゲームと消費税計算機です。よろしくお願いします! BreakShapes   弊社から出している拙作スケジュールのアプリです。 スケジュールというかちょっとした予定を入力して、社長、同僚、家族がどこ行った??っていうときに第三者が確認するためのアプリです 是非ダウンロードして感想をお聞かせ下さい。 『Team Scheduler』 概要 ▼アプリ価格: 無料 ▼対応OS: iOS(iPhone/iPod Touch)、Android ▼カテゴリ: 仕事効率化(App Store)、ビジネス(Google Play) ▼対応言語: 日本語 ▼推奨環境:  iOS版: iPhone4以降、iOS6. 0以降  Android版: Android OS 2. 3以降 ▼ダウンロード:    
  • テクログ

    Objective-C | スプラッシュ画像をローカライズする方法

    Mac,iPhone,Objective-C 全て利用歴6ヶ月の新米プログラマーが送る 自分が使って役立ったmethod&Tips集 参考場所はありますが単なるコピペを紹介してるわけではありません。 ちゃんと自前で作ってます。(謎のアピール) シリーズ第15弾です。 スプラッシュ画面のローカライズです。 スプラッシュ表示は指定されたファイル名をプロジェクトにコピーするだけなので簡単なのですが、 国別に変更する際の情報が見つからなくて苦労しました おまけに、キャッシュの効きがすごくて画像を変えても反映されないため、 確認作業中はうまくいってるんだか、駄目なんだか意味不明状態でした プロジェクトの一番上をクリック-> 画像と同じ状態にしたあと緑の丸で囲んだ+ボタンをクリックして、Japaneseを選択 (画面はJapanese選択後の状態になってます。) どこでもいいですが、Default-568h@2x.png (iPhone5用)をプロジェクトに入れます。画像の例ではSupporting Filesの下に入れてます。 その画像を選択したまま、左端のプロパティ画面にLocalize ボタンがあるのでクリック、 まずはBaseを選択、このときに裏でappディレクトリの下にある/Base.lproj/に画像がコピーされています。 このあと指定する言語以外は、ここの画像が使用されます。 Finderを使って、/ja.lproj/に日本語用の画像をおきます。 Xcodeに戻って、LocalizationにJapaneseがあるのでそれをクリック。 自分で置いたから、「File already exists」と出るので、「Use file」をクリック これでだけで、ローカライズの完了です とにかくキャッシュが効きまくるので実機で確認した方が間違いありません。 使用言語変更、ホーム->設定->一般->言語環境->言語->英語。 アプリを再起動してスプラッシュが切り替われば完了   スプラッシュのローカライズを行わない、タダ出るだけでいいんだ!ってときは プロジェクトのランチイメージの下の○矢印をクリックして、画面遷移して,画像を枠の中に入れるだけ それぞれ入れられる画像サイズが厳密に決まってるので、変な画像を入れたり画像が足りない場合は警告が出ます iOS6用のスプラッシュが欲しいときはプロパティにiOS 6.0 and Prior があるのでチェックするとよいです 今回の参考サイトも、stackoverflow 様々やで! ■stackoverflow IOS: launch image multiple language そのほかのObjective-C関連の記事をお探しならコチラをどうぞ
  • テクログ

    Objective-C | 非同期通信 JSONで送信バージョン

    Mac,iPhone,Objective-C 全て利用歴6ヶ月の新米プログラマーが送る 自分が使って役立ったmethod&Tips集 元ネタはありますが単なるコピペを紹介してるわけではありません。 ちゃんと自前で作ってます。(謎のアピール)   実務で通信するなら、AFNetworking 2.0 使った方がいいです。 変な取り回しも無いし世界中で使われているので間違いありません。 その上でご覧ください シリーズ第14弾です。 非同期通信 メッセージ通知バージョンの改良でJSON送信を追加です。 Objective-CでPOST通信すると改行コード(\N)がPHPでうまく受け取れないようでして悩んだあげく、JSON使って送るとうまく送信出来る事がわかりました。 Androidだとそんなまどろっこしい事しなくてもいいのですが、iPhoneでもPOSTで送るいいやり方があるのでしょうか? サーバープログラムそのままで動きませんが、元のソースをラップすることとで置換だけで簡単に対応可能です main_procを呼ぶ際に 単純にmain_proc($_POST);とすると、json 使わないバージョンが完成します 処理の切り分けが必要な際にどうぞ blogasync2_json.php $dataに変えた function main_proc($data){ if(empty($data['input'])){ $ar = NULL; } else { $data['input']; // 受け取った値とステータスを返す $ar[]=array("input"=>$data['input'],"ret"=>"OK"); $ar[]=array("input"=>$data['input'],"ret"=>"OK-2"); } header('Content-Type: application/json; charset=utf-8'); //JSONファイルの出力 echo json_encode($ar, JSON_UNESCAPED_UNICODE); //JSON形式にして返す } 前回のソースを流用してます。 続いてiOS側。Xcodeでフォームに配置したボタンをAction接続してあります NSURLConnectionDelegate も利用します 外部ライブラリでくるくる回る画像を利用してます。 https://github.com/samvermette/SVProgressHUD をダウンロードして FinderからSVProgressHUDディレクトリを自分のプロジェクトにポイっと入れて下さい ここから新しいところ。 「// json 変更箇所」で、検索して貰うと修正箇所がわかります。(void)getJson しか変えてません ViewController.h #import  @interface ViewController : UIViewController - (IBAction)async:(id)sender; @end ViewController.m #import "ViewController.h" #import "SVProgressHUD.h" @interface ViewController (){     NSString       *connectStatus_;     NSMutableData  *mData_;    // json     NSMutableArray *cellList_; } @end @implementation ViewController - (void)viewDidLoad {     [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning {     [super didReceiveMemoryWarning];     // Dispose of any resources that can be recreated. } #pragma mark svr connection // 非同期通信でgroup 1record 取得 - (void)getJson {     // 通信中表示     //[SVProgressHUD showWithStatus:@"ユーザー情報取得" maskType: SVProgressHUDMaskTypeBlack];     [SVProgressHUD showWithMaskType: SVProgressHUDMaskTypeClear];     connectStatus_ = @"start"; // json 変更箇所 //    NSString *query = [NSString stringWithFormat:@"input=%@", @"test-test"]; //    NSData *queryData = [query dataUsingEncoding:NSUTF8StringEncoding];     //-- json you syori ---     //送信するパラメータの組み立て     NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];     [mutableDic setValue:@"test-json"   forKey:@"input"]; // 送る値が複数ある場合、キーを変えて複数記述すればOK // json 変更箇所-end     NSError* error = nil;     NSData *queryData = [NSJSONSerialization dataWithJSONObject:mutableDic options:kNilOptions error:&error];          // 自分のサーバーにPHPソースを置く     NSString *url = @"http://localhost/blogasync2_json.php";          NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init];     [request setTimeoutInterval:30]; //タイムアウトを30秒に設定     [request setURL:[NSURL URLWithString:url]];     [request setHTTPMethod:@"POST"]; // json 変更箇所     [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];     [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];     // NSDataは NSUIntegerでカウントするので %dを unsigned longに変更     [request setValue:[NSString stringWithFormat:@"%lu",                        (unsigned long)[queryData length]] forHTTPHeaderField:@"Content-Length"]; // json 変更箇所-end     [request setHTTPBody:queryData];     [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;     [NSURLConnection connectionWithRequest:request delegate:self];     NSLog(@"async connection");          // loop やめる     //通知登録     NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];     [nc addObserver:self selector:@selector(FinishMethod) name:@"end" object:nil];     //通信開始     [NSURLConnection connectionWithRequest:request delegate:self];     //NSLog(@"async connection-grpsch");     // loop やめる     /*     while ([connectStatus_ isEqualToString:@"start"]) {         // while 内で一旦 NSRunLoop へ制御戻してやる。runUntilDateはモードとしてNSDefaultRunLoopModeを用いる         [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]]; //0.5sec     }     */     /* 以降の処理を分割しないとすぐに処理が実行されてしまう     if ([connectStatus_ isEqualToString: @"OK"]) {         NSError *error = nil;         //NSDictinaryがNSArrayになって返ってきます(id の中に入る)         id json = [NSJSONSerialization JSONObjectWithData:mData_ options:NSJSONReadingAllowFragments error:&error];         if(!error) {             if (json == [NSNull null]) {                 return;             }             cellList_     = [NSMutableArray array];             NSUInteger cnt = [json count];             for (int idx=0; idx サーバーから帰ってくる値がnullになる場合は、サーバーに置いてあるphpファイルがうまく参照出来ないとおもわれます。参照権限を確認して下さい そのほかのObjective-C関連の記事をお探しならコチラをどうぞ   弊社から出している拙作スケジュールのアプリです。 スケジュールというかちょっとした予定を入力して、社長、同僚、家族がどこ行った??っていうときに第三者が確認するためのアプリです 是非ダウンロードして感想をお聞かせ下さい。 『Team Scheduler』 概要 ▼アプリ価格: 無料 ▼対応OS: iOS(iPhone/iPod Touch)、Android ▼カテゴリ: 仕事効率化(App Store)、ビジネス(Google Play) ▼対応言語: 日本語 ▼推奨環境:  iOS版: iPhone4以降、iOS6. 0以降  Android版: Android OS 2. 3以降 ▼ダウンロード:    
  • テクログ

    Objective-C | 非同期通信 メッセージ通知バージョン

    Mac,iPhone,Objective-C 全て利用歴6ヶ月の新米プログラマーが送る 自分が使って役立ったmethod&Tips集 元ネタはありますが単なるコピペを紹介してるわけではありません。 ちゃんと自前で作ってます。(謎のアピール) 実務で通信するなら、AFNetworking 2.0 使った方がいいです。 変な取り回しも無いし世界中で使われているので間違いありません。 その上でご覧ください シリーズ第13弾です。 前回非同期通信簡単バージョンの改良です。 NSRunLoopで通信待機するため、待機中にイベントが発生すると拾ってしまうことがあります。 そのため連続した操作の途中で通信する場合には向いていません。 通信終了時に 内部でNSNotification を利用して終了通知を行い。それをトリガーとして以降の処理を実行します。 サーバープログラムは使い回しなので割愛 前回のソースを流用するので注意点も同じ 続いてiOS側。Xcodeでフォームに配置したボタンをAction接続してあります NSURLConnectionDelegate も利用します 外部ライブラリでくるくる回る画像を利用してます。 https://github.com/samvermette/SVProgressHUD をダウンロードして FinderからSVProgressHUDディレクトリを自分のプロジェクトにポイっと入れて下さい ここから新しいところ。 「// loop やめる」で、検索して貰うと修正箇所がわかります LOOP待機後に行っていた処理をやめて、NSNotificationに置き換え。 処理終了後にSVProgressHUDを解除すると画面が触れるようになります。 ViewController.h #import  @interface ViewController : UIViewController - (IBAction)async:(id)sender; @end ViewController.m #import "ViewController.h" #import "SVProgressHUD.h" @interface ViewController (){     NSString       *connectStatus_;     NSMutableData  *mData_;    // json     NSMutableArray *cellList_; } @end @implementation ViewController - (void)viewDidLoad {     [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning {     [super didReceiveMemoryWarning];     // Dispose of any resources that can be recreated. } #pragma mark svr connection // 非同期通信でgroup 1record 取得 - (void)getJson {     // 通信中表示     //[SVProgressHUD showWithStatus:@"ユーザー情報取得" maskType: SVProgressHUDMaskTypeBlack];     [SVProgressHUD showWithMaskType: SVProgressHUDMaskTypeClear];     connectStatus_ = @"start";          NSString *query = [NSString stringWithFormat:@"input=%@", @"test-test"];     NSData *queryData = [query dataUsingEncoding:NSUTF8StringEncoding];          NSString *url = @"http://localhost/blogasync1.php";          NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init];     [request setTimeoutInterval:30]; //タイムアウトを30秒に設定     [request setURL:[NSURL URLWithString:url]];     [request setHTTPMethod:@"POST"];     [request setHTTPBody:queryData];          [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;     [NSURLConnection connectionWithRequest:request delegate:self];     NSLog(@"async connection");          // loop やめる     //通知登録     NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];     [nc addObserver:self selector:@selector(FinishMethod) name:@"end" object:nil];     //通信開始     [NSURLConnection connectionWithRequest:request delegate:self];     //NSLog(@"async connection-grpsch");     // loop やめる     /*     while ([connectStatus_ isEqualToString:@"start"]) {         // while 内で一旦 NSRunLoop へ制御戻してやる。runUntilDateはモードとしてNSDefaultRunLoopModeを用いる         [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]]; //0.5sec     }     */     /* 以降の処理を分割しないとすぐに処理が実行されてしまう     if ([connectStatus_ isEqualToString: @"OK"]) {         NSError *error = nil;         //NSDictinaryがNSArrayになって返ってきます(id の中に入る)         id json = [NSJSONSerialization JSONObjectWithData:mData_ options:NSJSONReadingAllowFragments error:&error];         if(!error) {             if (json == [NSNull null]) {                 return;             }             cellList_     = [NSMutableArray array];             NSUInteger cnt = [json count];             for (int idx=0; idx そのほかのObjective-C関連の記事をお探しならコチラをどうぞ   弊社から出している拙作スケジュールのアプリです。 スケジュールというかちょっとした予定を入力して、社長、同僚、家族がどこ行った??っていうときに第三者が確認するためのアプリです 是非ダウンロードして感想をお聞かせ下さい。 『Team Scheduler』 概要 ▼アプリ価格: 無料 ▼対応OS: iOS(iPhone/iPod Touch)、Android ▼カテゴリ: 仕事効率化(App Store)、ビジネス(Google Play) ▼対応言語: 日本語 ▼推奨環境:  iOS版: iPhone4以降、iOS6. 0以降  Android版: Android OS 2. 3以降 ▼ダウンロード:    
  • テクログ

    Objective-C | 非同期通信 簡単バージョン

    Mac,iPhone,Objective-C 全て利用歴6ヶ月の新米プログラマーが送る 自分が使って役立ったmethod&Tips;集 シリーズ第12弾です。 今回は開始1ヶ月目くらいで挑戦した非同期通信についてです。 画面に表示するような動的部分が無いとは言えいきなり挑戦するなんて無謀でした。 しかし、始めたばかりで無謀かどうかの判断すら付かないのであちこち調べました。 当時ライブラリがあることすら知らなかったのですが、今なら AFNetworking, ASIHTTPRequest 当たりを調べて使いますねキット。 完成したのがこの簡単バージョン よそ様の非同期通信のサンプルは画像持ってくる例が多いのですが、今回はサーバ上にあるphpで処理を行い結果を受け取るという前提です。 非同期通信なのに通信終了まで待ってます。これはサーバーからデータを受け取らないと画面だけ表示しても意味をなさないからです。 ではなぜ、同期通信しないのか。設計は複雑になりますが、これだけ覚えておけばやり方によって同期/非同期どっちも使えるからです。 実際にコーディングした際もデータが取得出来なかったときの処理がやりやすかったです。 というわけで、サーバープログラムから解説 blogasync1.php $_POST['input'],"ret"=>"OK"); $ar[]=array("input"=>$_POST['input'],"ret"=>"OK-2"); } header('Content-Type: application/json; charset=utf-8'); //JSONファイルの出力 echo json_encode($ar, JSON_UNESCAPED_UNICODE); //JSON形式にして返す 続いてiOS側。Xcodeでフォームに配置したボタンをAction接続してあります NSURLConnectionDelegate も利用します 外部ライブラリでくるくる回る画像を利用してます。 https://github.com/samvermette/SVProgressHUD をダウンロードして FinderからSVProgressHUDディレクトリを自分のプロジェクトにポイっと入れて下さい ViewController.h #import  @interface ViewController : UIViewController - (IBAction)async:(id)sender; @end ViewController.m #import "ViewController.h" #import "SVProgressHUD.h" @interface ViewController (){     NSString       *connectStatus_;     NSMutableData  *mData_;    // json     NSMutableArray *cellList_; } @end @implementation ViewController - (void)viewDidLoad {     [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning {     [super didReceiveMemoryWarning];     // Dispose of any resources that can be recreated. } #pragma mark svr connection // 非同期通信でgroup 1record 取得 - (void)getJson {     // 通信中表示     [SVProgressHUD showWithMaskType: SVProgressHUDMaskTypeClear];     connectStatus_ = @"start";     // login id     NSString *query = [NSString stringWithFormat:@"input=%@", @"test-test"];     NSData *queryData = [query dataUsingEncoding:NSUTF8StringEncoding];          // 各自のサーバのURLに置き換えて下さい。     NSString *url = @"http://localhost/blogasync1.php";          NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init];     [request setTimeoutInterval:30]; //タイムアウトを30秒に設定     [request setURL:[NSURL URLWithString:url]];     [request setHTTPMethod:@"POST"];     [request setHTTPBody:queryData];          [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;     [NSURLConnection connectionWithRequest:request delegate:self];     NSLog(@"async connection");          while ([connectStatus_ isEqualToString:@"start"]) {         // while 内で一旦 NSRunLoop へ制御戻してやる。runUntilDateはモードとしてNSDefaultRunLoopModeを用いる         [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]]; //0.5sec     }          if ([connectStatus_ isEqualToString: @"OK"]) {         NSError *error = nil;         //NSDictinaryがNSArrayになって返ってきます(id の中に入る)         id json = [NSJSONSerialization JSONObjectWithData:mData_ options:NSJSONReadingAllowFragments error:&error;];         if(!error) {             if (json == [NSNull null]) {                 return;             }             cellList_     = [NSMutableArray array];             NSUInteger cnt = [json count];             for (int idx=0; idx NSRunLoop を利用して通信待ちを行っています。ちょっとしたやりとりならこれで十分だと思います。 connection:シリーズは毎回同じなのでひとまとめにしておくとあとで使い回しするときに便利です。 他のがっつりした取り方は次回解説します。 序盤すぎて覚えてませんが、たぶん参考にしたのはここだと思います ■バリューアークコンサルティング株式会社NSURLConnectionとNSJSONSerializationを使用してjsonをパースする   ■YoheiM.NET[XCODE] iPhoneアプリからHTTPリクエストを送信して、データを受信する方法   そのほかのObjective-C関連の記事をお探しならコチラをどうぞ
  • テクログ

    Objective-C | UICollectionViewを引っ張って更新

    Mac,iPhone,Objective-C 全て利用歴6ヶ月の新米プログラマーが送る 自分が使って役立ったmethod&Tips;集 シリーズ第11弾です。 リストを引っ張ったらくるくるして更新するやつをやってみます。 TeamScheduler のグループ画面にもこっそり導入されております。 UITableViewでやるのが普通なんでしょうが、今回はUICollectionViewでCellの色がランダムで変わるようにします。 一部methodが違うだけで特に違いはありません。 cellForItemAtIndexPath / forRowAtIndexPathの様にUICollectionViewは○○Item、UITableViewは○○Rowです。 事前準備として 新しいフォームにUICollectionViewを置いて、その上にUICollectionViewCellを4つ置きます。 UICollectionViewは高さがあるとスクロール出来ないので、高さをあらかじめ短くしておきます。 UICollectionViewCellのidentifierにcell1~cell4までそれぞれ名前を付けておきます。 やっとプログラムの説明 ViewController.h UICollectionView をoutlet接続して、DataSourceとDelegateの使用を宣言してあります #import  @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UICollectionView *collectionView; @end ViewController.m #import "ViewController.h" @interface ViewController () @end @implementation ViewController BOOL nameflag = YES; - (void)viewDidLoad {     [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.          // initialize     [_collectionView setDataSource:self];     [_collectionView setDelegate:self];     // 引っ張って更新     UIRefreshControl *refreshControl = [[UIRefreshControl alloc]init];     // 更新アクションを設定     [refreshControl addTarget:self action:@selector(pullDown:) forControlEvents:UIControlEventValueChanged];          // UICollectionViewControllerにUIRefreshControlをadd     [_collectionView addSubview:refreshControl];     [_collectionView reloadData]; } - (void)didReceiveMemoryWarning {     [super didReceiveMemoryWarning];     // Dispose of any resources that can be recreated. } #pragma mark -collection view - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {     return 1; } // 各セクションの項目数 -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {     return 4; } //Method to create cell at index path -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{     NSInteger row = indexPath.row;          UICollectionViewCell *cell = nil;          NSString *cellname = [NSString stringWithFormat:@"cell%d", row+1];     cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellname forIndexPath:indexPath];     cell.backgroundColor = [self randomColor];     return cell; } #pragma mark -action -(void) pullDown:(id)sender {     [sender beginRefreshing];     [_collectionView reloadData];     [sender endRefreshing]; } - (UIColor *)randomColor {     static NSArray *selectColor = nil;     static dispatch_once_t onceToken;     dispatch_once(&onceToken;, ^{         selectColor = @[                     [UIColor blueColor],                     [UIColor redColor],                     [UIColor greenColor],                     [UIColor yellowColor],                     [UIColor orangeColor],                     [UIColor purpleColor],                     [UIColor lightGrayColor],                     ];     });          NSInteger randIdx = arc4random() % selectColor.count;     return selectColor[randIdx]; } @end 自前でUICollectionViewをセットしてるので、表示用のコードも自前で用意しますUITableViewと必要な物は同じです。名前がちょっと違うだけ 例では、reloadDataを行うだけですが、画像を新規に読み直すとか並び順変える等使えると思います。 参考にさせていただいたサイトです ■Qiita iOS - UIRefreshControlで引っ張って更新をする そのほかのObjective-C関連の記事をお探しならコチラをどうぞ   今回も宣伝しておしまいにします。   弊社から出している拙作スケジュールのアプリです。 スケジュールというかちょっとした予定を入力して、社長、同僚、家族がどこ行った??っていうときに第三者が確認するためのアプリです 是非ダウンロードして感想をお聞かせ下さい。 『Team Scheduler』 概要 ▼アプリ価格: 無料 ▼対応OS: iOS(iPhone/iPod Touch)、Android ▼カテゴリ: 仕事効率化(App Store)、ビジネス(Google Play) ▼対応言語: 日本語 ▼推奨環境:  iOS版: iPhone4以降、iOS6. 0以降  Android版: Android OS 2. 3以降 ▼ダウンロード: