Build apps using a powerful open language.
Build apps using a powerful open language.
同期処理は簡単に非同期処理にできますが、非同期処理は簡単には同期処理にできません。 Objective-Cで、非同期処理を同期的に実行するにはどうしたら良いのかと調べたところ、ディスパッチセマフォを使うのが良いようでした。 セマフォとは信号装置とかいう意味らしいですが、「カウンタ」だと思って良いんじゃないかと思っています。 同期処理の例 まずは通常の同期処理から。 for (int i = 0; i < 5; i++) { sleep(1); NSLog(@"Process: %d", i); } これは、1秒ごとにカウントを表示する処理です。これは当然同期処理です。実行を始めると5秒間はこの先に処理が進めません。 同期処理を非同期処理にする 同期処理を非同期処理にするには、dispatch_asycを用いて、バックグラウンドのスレッドのキューに処理を追加すれば良いです。 dispatch
WebAPIを利用する時のパラメータなどで、日本語や記号が含まれている場合にはURLエンコード(パーセントエンコーディング)を行う必要があります。 NSStringクラスのstringByAddingPercentEscapesUsingEncodingメソッドがありますが、このメソッドでは期待する動きをしてくれません。なぜならstringByAddingPercentEscapesUsingEncodingメソッドでは「&」や「+」などがエスケープされません。 正しくエンコードするにはCFURLCreateStringByAddingPercentEscapes関数を使う必要があります。デコードも同じくCFURLCreateStringByAddingPercentEscapes関数で行うことができます。 それでは続きでCFURLCreateStringByAddingPercentEs
こんにちは ビンゴ中西です。 弊社では凄腕エンジニアがCore Dataの難しい部分を ある程度隠蔽して使えるようにしてくれていますので、 以下の手順を丸っと踏むことはないのですが、 今回はCore Dataの基礎を学びます。 1. プロジェクトを作成したらCoreData.frameworkを追加 何も考えずにCoraData.frameworkを追加しましょう。 とくにダウンロードすることもなくXcodeから普通にできます。 2. モデルをペコペコ作っていくファイルを作成 今回は、 Model.xcdatamodeldという名前で作ってみました。 3. エンティティを作ってみる Usersというエンティティで nameとageを持たせました。 4. いよいよソースを実装しよう! その前に..... おっしゃ!ソースが書けると思いきや、その前に、 NSManagedObjectを継承した
回転変化時 通常画面の向きが変化した時、 画面回転する直前の呼び出し - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 画面回転する直後の呼び出し - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation で処理できます。 しかし、これでは起動時にどっちを向いているかには対応してくれません。 起動時の取得 起動時の画面の向きを取得するには int direction = self.interfaceOrientation; これをviewDidLoadで検出すればよかったようで
NSURLのどのメソッドでどの要素が取れるんだっけ?となりがちなのでメモしとく。 プログラム。 NSURL *url = [NSURL URLWithString:@"http://user:password@www.example.com:8080/hoge/fuga/index.html?a=1&b=2#test"]; NSLog(@"absoluteString : %@", [url absoluteString]); NSLog(@"absoluteURL : %@", [url absoluteURL]); NSLog(@"baseURL : %@", [url baseURL]); NSLog(@"fragment : %@", [url fragment]); NSLog(@"host : %@", [url host]); NSLog(@"lastPathComponen
こんなAPIを待っていた! ダブルタップとか、スワイプとか、ピンチインとか自力で判定すると結構めんどうなんですよね。でも、iPad以降はもう簡単にタップを捕捉できます。 Gesture Recognizer!無料! UIGestureRecognizer ジェスチャーを捕捉してくれるのはUIGestureRecognizerクラスです。派生クラスで以下のものが用意されています。 UITapGestureRecognizer タップ UIPinchGestureRecognizer ピンチインアウト主に拡大縮小 UIPanGestureRecognizer ドラッグ UISwipeGestureRecognizer ページめくりやスクロール等のスワイプ UIRotationGestureRecognizer 指2本で回転させる感じ UILongPressGestureRecognizer 長
もしかしたら基本なのかもしれませんがUITextViewであるテキストプログラム側で挿入したくなった時のお作法。 http://stackoverflow.com/questions/2792589/uitextview-insert-text-in-the-textview-text - (void) insertString: (NSString *) insertingString intoTextView: (UITextView *) textView { NSRange range = textView.selectedRange; NSString * firstHalfString = [textView.text substringToIndex:range.location]; NSString * secondHalfString = [textView.text s
先日ポストした後輩が作るアプリは動画を再生するアプリを作るみたい。 動画再生にはMPMoviePlayerControllerがあるが、動画をアプリからコントロールするので、MPMoviePlayerControllerに表示される再生ボタンなどのコントローラーはいらないらしい。 そうなると、AVFoundationを使って表示させた方が都合がいいです。 重要なクラスは、以下の2つ。 1. AVPlayer 動画を制御するクラス。 動画についての様々な情報も持っている。 2. AVPlayerLayer 動画を表示するクラス。 AVPlayerLayerはCoreAnimationのCALayerのサブクラス。 レイヤーなので、UIViewのlayerプロパティなどに追加(addSublayer)して使う。 よく見るこのページでは、UIViewのクラスメソッドlayerClass
Cocoa iOS デザインパターン どうも今のインターネット※の上ではMacよりも、iOSのコードやフレームワークを前提にした話が多いせいか、“Cocoa” という言葉を見なくなってきたように見えるのは、iOS前からCocoaを書いてきた人間にとっては少し悲しいことである。 そんなことはどうでも良くて、最近他人の書いたiOSのコードをよく見るのだが、その書き方、クラスの切り方、命名規則、カテゴリの使い方、継承の使い方、デリゲートなど各種パターンの使い方などなどその差は千差万別である。最初にCocoaを使ったという人は希少で、その大半は以前にC#, Java, Ruby, Python, PHPやそれらでよく使われているフレームワークを使っているがゆえ、CocoaらしいCocoaを書いている、書けている、または意識している人は少ないかもしれない。 Cocoa的な書き方は何で正解であるかとい
iOSアプリではシングルウィンドウしかないと思われがちですが、実は随所で使われているiOSのウィンドウ「UIWindow」。 このUIWindowの知られざる登場シーンや活用法、注意点などについて、DeNAの@sintarioさんに解説レポートを寄稿していただきました。 by 馬場美由紀 (CodeIQ中の人) iOS開発における「ウィンドウ」とは? デスクトップOSであれば、一つのアプリが複数のウィンドウを同時に展開するマルチウィンドウアプリであることは、ほぼ当たり前ですよね。画面上にいくつものウィンドウを同時に開いて、並べたり切り替えたりしながら画面の広さを活かしたやり方で作業するものです。 これに対して、iOSの世界観は大きく様相が異なります。高精細なRetinaディスプレイが普及したとはいえ、iPhoneの画面はやはりお世辞にも広くはありません。一般的にiOSでは、一つのアプリが画
はじめに Xcode 5 で XCTest という新しいテストフレームワークが投入されました。OCUnitを使ったプロジェクトからのコンバートもできるので、それを置き換えるものと考えて良さそうです。また Test Navigator という新しいナビゲータが導入され、テストターゲットとの親和性が高くなっているようです。さらにコマンドラインからのテスト実行もサポートされました。 導入 何も考えなくてもプロジェクトを作成すると勝手にTestターゲットが作成されます。素敵です。 メニューからProduct -> Test 又は Command + U でテストが実行されます。Testクラス新規作成時はXCFailが1つ設定されているので必ずテストが失敗します。この辺はOCUnitと変わりません。 Test Navigator で動作させる ナビゲータから↓のアイコンを選択します。 最後に実行した
久しぶりにテストを書く このブログも独自ドメインではてなブログに移行して読者数が一気に減ってしまいましたが、半年以上前のホッテントリぶりにブログ書きます。 前回は iOS 開発環境における CI 導入についてでしたが、今回はもう一度テストに戻って、その中でも iOS における Integration Test の実行方法について書きたいと思います。 Integration Test って? 日本語では良く結合テストと呼ばれていますが、iOS 開発ガイドなどでは単体テストをロジックテストと呼び、結合テストはアプリケーションテストと呼んでいます。 結合テストは UI テストとも呼ばれる場合もあったり、このブログで紹介した GHUnit でも最近では ViewController のテストができたりと境界は結構曖昧です。 僕の iOS におけるテストのイメージとしては、 Unit Test はコ
Managed Object Contextはスレッドセーフではない Core Dataを利用するiOS Appの処理の一部をマルチスレッド実行するように修正したところ、実行時エラーが発生して強制終了するようになってしまった。このときデバッグコンソールには次のようなメッセージが出力された。 2012-01-13 14:09:16.441 [App名][12661:6c03] *** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSCFSet: 0x27cbd0> was mutated while being enumerated.' ステップ実行によりエラー発生箇所を調べたところ、NSManagedObjectContextオブジェクトに対してexec
『iOSアプリ開発に役立つTips』という Facebook ページをやっておりまして、そこで評判が良かった投稿(※)を 20 個ほど紹介します。 (※) Facebook ページの insights にある「クチコミ度」で判断しました アプリ実行中にコードを修正してそのまま実行中のアプリに反映させる アプリ実行中にコードを修正してそのまま実行中のアプリに反映させることができるXcodeプラグイン。 実機でもシミュレータでも使用可能とのこと。実機での動作検証中に修正して再インストールは時間かかるので、超ありがたいかも。 Injection for Xcode 投稿:2013/2/4 「PCのwebブラウザからiPhoneのカメラロールにアクセスできるようにするアプリ」のしくみ アプリ側でURLを発行している画面キャプチャがあるので、アプリにHTTPサーバ機能をもたせて(古いけどCocoaH
The latest version of the Injection App for "Hot Reloading" code into your iOS, tvOS or macOS app is currently available in the "Mac App Store": https://itunes.apple.com/us/app/injectioniii/id1380446739?ls=1&mt;=12 A simple overview of how to use this version in the description starting with the example project GettingStarted.zip and you can see this in action here: The new version uses a file wat
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く