タグ

ブックマーク / blog.syuhari.jp (23)

  • [iPhone 開発メモ] AVAudioPlayer を使用して音楽を再生する | Sun Limited Mt.

    BGM のような音声ファイルを再生する方法として、以前「[iPhone 開発メモ] Audio Queue で音声ファイルを再生する」というエントリを書きましたが、iPhone OS 2.2 から AVAudioPlayer を使用することによりもっと簡単に再生することができました。 FrameWorks に AVFoundation.framework を追加して、ヘッダファイルでインクルードします。 #include <AVFoundation/AVFoundation.h> 後は以下のようにすれば再生可能です。 NSString *path = [[NSBundle mainBundle] pathForResource:@"hoge" ofType:@"mp3"]; NSURL *url = [NSURL fileURLWithPath:path]; AVAudioPlayer *

  • Objective-C でシングルトンパターン | Sun Limited Mt.

    Objective-C でシングルトンパターンのクラスを作成するメモです。 シングルトンパターンとは、クラスのインスタンスがひとつしか生成されないことを保証するデザインパターンです。NSUserDefaults などがシングルトンなクラスです。 シングルトンなクラスを作成するときのポイントです。 静的インスタンスを生成して、ひとつだけ作成したインスタンスを入れておく アップルが推奨しているクラスファクトリーメソッド名(sharedInstance や sharedManager) を使用して、インスタンス未生成時のみインスタンスを生成する インスタンスがひとつしか生成されないことを保証するために [[Hoge alloc] init] とされた場合の対策をしておく retain, retainCount, copyWithZone, release, autorelease をオーバライド

  • MySQL で NULL を一番最後にして昇順にソートする | Sun Limited Mt.

    2008.2.27 追記 コメントで教えていただきました下記方法で簡単にできました。 is null asc の指定と 通常の asc の指定をするのがポイントですね。 SELECT id, comment FROM table ORDER BY comment IS NULL ASC, comment ASC; —–追記ここまで—– MySQL で昇順にソートすると NULL は一番最初に来ます。 それを最後にできないかということで下記のようなSQL を考えてみました。 SELECT id, comment, CASE WHEN comment IS NULL THEN 10000 ELSE ASCII(LEFT(comment,1)) END AS dummy FROM table ORDER BY dummy ASC, COMMENT ASC comment カラムを昇順でソートして

  • [iPhone] MapKit にアイコン画像でピンを立ててタップ可能にする | Sun Limited Mt.

    MapKit を使用してい以下のことをやってみます。 アイコン画像でピンを立てる ピンをタップするとバルーンを表示する バルーンのアクセサリをタップ可能にする アノテーションクラス ピンを立てるにはアノテーションというプロトコルを使用します。このプロトコルを持ったクラス MyAnnotation を作成します。バルーンには左右に View とタイトルとサブタイトルを表示することができます。左右に表示する View は後で説明する MKAnnotationView に設定しますが、タイトルとサブタイトルは MKAnnotation プロトコルを持つクラスに設定します。 #import <Foundation/Foundation.h> #import <MapKit/MapKit.h> @interface MyAnnotation : NSObject <MKAnnotation> { C

  • [iPhone] MapKit で現在地を表示する | Sun Limited Mt.

    MapKit で現在地を表示する方法です。 MapKit フレームワークと CoreLocation フレームワークが必要になるので、追加しておきます。mapView.showsUserLocation を YES にすることにより、現在地の青い印を表示することができます。また、CLLocationManager を使用して GPS より現在地を取得して地図の中心にしています。 #import <UIKit/UIKit.h> #import <MapKit/MapKit.h> #import <CoreLocation/CoreLocation.h> @interface MapViewController : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate> { MKMapView* mapView; CLLo

  • [iPhone] 実機転送時にセキュリティーエラーになった時の対処方法 | Sun Limited Mt.

    Xcode から iPhone にアプリを転送しようとしたら、コンソールに下記のエラーメッセージが出て転送できませんでした。 Error launching remote program: security policy error. 原因と解決方法を先に書くと、原因は期限が切れたプロファイルがあったためで、解決方法は期限切れのプロファイルを削除すると無事転送できるようになりました。 この期限切れのプロファイルは転送するアプリで使用しているプロファイルとは関係なくてもセキュリティーエラーに引っかかるようです。今回も実際に転送するアプリとは違うアプリで使用しているプロファイルが期限切れでした。 以下は解決に至るまでの経緯です。 最初に試したことは以下のようなこと。 iPhone と iPod touch で試してみたがダメ Xcode でクリーンアップしたがダメ Xcode 再起動、iPho

  • CakePHP ログ出力 | Sun Limited Mt.

    CakePHP でログ出力させるメモです。 $this->log(ログに出力するメッセージ, ログ種別); 出力するメッセージは文字列でも配列でもかまいません。配列の場合は print_r されたものが出力されます。 ログの種別は LOG_DEBUG で debug.logLOG_ERROR で error.log に出力されます。デフォルトは LOG_ERROR です。 ログファイルは LOGS で指定されたディレクトリへ出力されます。 デフォルトは /app/tmp/logs です。 ただこの定数 LOGS は cake/config/paths.php で指定されているので、app/config/core.php で定義されている定数のように気軽に変更しない方がいいかもしれません。 ログファイルが存在しない場合はファイルを作成してくれます。 出力されるログは下記のようになります

  • CakePHP1.2 Form ヘルパーで日付のフォームを作る | Sun Limited Mt.

    CakePHP1.2 の Form ヘルパーを使用して日付のフォームを作成したときのメモです。 $attr = array('minYear' => 2000, 'maxYear' => date('Y'), 'separator' => ' / '); echo $form->dateTime('Model/field', 'YMD', 'NONE', date('Y-m-d'), $attr); とすると下のような日付を選択するフォームができます。 第2引数の ‘YMD’ で年月日の並び順を指定します。日付を表示しない場合は ‘NONE’ を指定します。 NONE 非表示 YMD 年月日の順に表示 DMY 日月年の順に表示 MDY 月日年の順に表示 第3引数で時間表示の指定をします。 NONE 非表示 12 時間を12時間表示 24 時間を24時間表示 第4引数でデフォルトの日時を指定

  • [iPhone] ステータスバーを消す方法 | Sun Limited Mt.

    iPhone のステータスバーを消す方法は、info.plist を使うのがいい。 info.plist に UIStatusBarHidden という Key を追加して、Value に Boolean を選択してチェックボックスにチェックを入れます。 プログラム上から [UIApplication sharedApplication].statusBarHidden = YES; として消すことも出来ますが、常時消したい場合は info.plist を使う方がいいです。info.plist で消すとアプリ起動時に消えています。 関連する投稿 [iPhone] YouTube を連続再生する PlayLists を公開しました [iPhone] アプリ内で使用する HTML ファイルをローカライズ [iPhone] MFMailComposeViewController で画像入りの H

  • [iPhone] UIView の frame と bounds の違い | Sun Limited Mt.

    UIView の位置やサイズを知るプロパティに frame と bounds があります。この frame とbounds の違いを簡単にまとめて見ました。 簡単にまとめると以下のようになります。 frame はスーパービューから見た座標 bounds はローカルのビューから見た座標 実際に親子関係のビューを作成して確認してみます。 ViewB は ViewA の中に配置されています。 [ViewA addSubView:ViewB] のような関係です。 この時の frame と bounds はそれぞれ以下のようになります。 ViewA.frame origin: 0,0 size: 550×400 ViewA.bouns origin: 0,0 size: 550×400 ViewB.frame origin: 200,100 size: 200×250 ViewB.bounds or

  • [iPhone] JSON Framework の使い方(解析編) | Sun Limited Mt.

    JSON Framework を使って JSON をパースする方法です。まだ、JSON Framework をインストールしていない場合は、前回の JSON Framework の使い方(準備編)からやってみてください。 NSString *jsonData = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:url] encoding:NSUTF8StringEncoding error:nil]; if (jsonData == nil) { // error } else { NSDictionary* jsonItem = [jsonData JSONValue]; } 解析した結果は、NSDictionary と NSArray が混合しているので注意が必要です。JSON によっては最初に NSArray

  • [iPhone] JSON Framework の使い方(準備編) | Sun Limited Mt.

    Objective-C で JSON を解析するフレームワークがあります。この JSON Framework は iPhone でも使えるので早速インストールしてみました。プロジェクト毎に設定する必要があるので忘れないようにメモしておきます。 Google Code から dmg ファイルをダウンロードします。 json-framework – Google Code dmg に入っている SDKs ディレクトリを ~/Library/ にコピーします。もし既に SDKs ディレクトリがあれば中身を全てコピーします。 Xcode を起動してメニューの プロジェクト > プロジェクトの設定を編集 を選択。 ビルド設定の中にある「アーキテクチャ > 追加SDK」をダブルクリックして値の編集画面を出し、「+」をクリックして以下を追加する。 $HOME/Library/SDKs/JSON/$(PL

  • [iPhone 開発メモ] iPhone/iPod touch に自作アプリを転送する方法 | Sun Limited Mt.

    ようやく自作アプリが出来てきたので、iPod touch に転送して実機テストをしてみました。その際に結構手順が面倒で忘れそうなのでメモしておきます。 証明書の作成を申請する 証明書を作成するにはアップルに証明書の申請ファイルを送らないといけない。その申請ファイルの作成にはキーチェーンアクセスを使用します。キーチェーンアクセスを起動して、メニューの「キーチェーンアクセス」>「証明書アシスタント」>「認証局に証明書を要求」を選択します。 証明書情報に ADC に登録したメールアドレスと名前(コモンネーム)を入力。メールで送信はしないので CA のメールアドレスは空白。「ディスクに保存」と「鍵ペア情報を指定」にチェックを入れる。

  • [iPhone] UIPickerView でエンドレスなロールを作る | Sun Limited Mt.

    Pickerでエンドレスなロールを作る方法 – Ni chicha, ni limona — paellaの日記 – iPhoneアプリ開発グループ 上記エントリのコメントで紹介されていた下記エントリを試してみました。下記エントリからプロジェクトzip で落とせるのですぐに試せます。 Pauldy’s House of Geek ? Blog Archive ? The Abusive PickerView 発想が面白いと思います。要素としては10個の配列を用意しておき、pickerView:numberOfRowsInComponent: で 16384 個あると返しておき、pickerViewLoaded で10個の配列に置き換えている。回転が止まると pickerView:didSelectRow:inComponent: でロールを中央の10個に移動するので、連続で回転させない

  • CakePHP モデルの validation の拡張 | Sun Limited Mt.

    CakePHP のモデルの validation の拡張のメモです。 ユーザ登録フォームなどでパスワードの再確認のバリデーションを行うときの方法です。 views/users/regist.thtml パスワード:< ?php echo $html->password('User/password'); ?> 確認用パスワード:< ?php echo $html->password('User/password2'); ?> < ?php echo $html->tagErrorMsg('User/password2', 'パスワードが一致しません'); ※users テーブルにpassword2 のカラムはなくてかまいません。 models/users.php function validates($data=array()) { if(empty($data)) { $data = $

  • [iPhone] UINavigationBar に UISearchBar を入れる方法 | Sun Limited Mt.

    ナビゲーションバーに検索バーを入れるとき、Interface Builder で入れようとしても入れることは出来ません。Youtube アプリのようにナビゲーションに検索を入れたかったので調べたメモです。 検索バーを入れたいビューコントローラーに以下のようにして入れます。 UISearchBar *searchBar = [[UISearchBar alloc] init]; searchBar.delegate = self; self.navigationItem.titleView = searchBar; self.navigationItem.titleView.frame = CGRectMake(0, 0, 320, 44); [searchBar release]; 検索バーを入れたビューコントローラに UISearchBarDelegate を設定するのをお忘れなく。 関

  • [iPhone] アプリ名をローカライズする方法 | Sun Limited Mt.

    iPhone のホーム画面に表示されるアプリ名をローカライズする方法です。 InfoPlist.strings 新規ファイルを作成で InfoPlist.strings という名称のファイルを作成します。作成するのは Resources グループの中などでよいでしょう。Ctrl+N などで新規ファイル作成画面を開き、テンプレートは Mac OS X の「その他」にある「空のファイル」を選択します。 アプリ名の登録 info.plist の Bundle display name に指定した名前が通常は表示されますが、アプリ名をローカライズする場合は InfoPlist.strings に CFBundleDisplayName として登録します。 CFBundleDisplayName = "App Name"; InfoPlist.strings をローカライズ InfoPlist.st

  • [iPhone] アプリからスクリーンショットを撮って写真ライブラリに保存する | Sun Limited Mt.

    お絵描き系のアプリを作成していて画像データを写真ライブラリに保存する方法を調べたのでメモ。 一番簡単な方法は メニューなどを消した状態にする スクリーンショットを撮る 保存する メニューなどを消して保存したい画像データだけにするのはそれぞれのアプリによって違うので省略。ステータスバーも消さないとダメですね。ステータスバーを消す方法は昨日書いたエントリを参照。 スクリーンショットを撮るのは下記のコードで撮れます。 UIImage *image = [UIImage imageWithCGImage:UIGetScreenImage()]; UIImage データを保存するには下記の関数で保存できます。 void UIImageWriteToSavedPhotosAlbum(UIImage * image, id completionTarget, SEL completionSelector

  • [iPhone] plist から情報を取得する | Sun Limited Mt.

    plist とはプロパティリストのことで、アップル特有のデータフォーマットで中身は XML です。アプリの情報で info.plist とか使うので、iPhone アプリ開発時には一度は使ったことがあると思います。 今回はアプリに渡す固定値を plist で渡すことをやりました。 plist の書き方 Xcode なら plist 用のエディタがあるので、それを使うのが最も簡単です。ただ、件数が多いデータを作成する場合手作業では面倒なので、簡単なスクリプトを組んで生成したいところです。今回、私は PHP で2000件ほどのデータを plist に書き出しました。 plist の書き方ですが以下のようになります。 NSString <string> String Data</string;&gt NSNumber <integer>123456</integer> <real>3.14159

  • mysql で SQL の最後をセミコロンではなくGにすると | Sun Limited Mt.

    mysql で SELECT 文の最後をセミコロンではなくメタコマンドの \G にすると結果を縦に表示してくれる!今まで知りませんでした。カラム数が多い時はかなり便利です。 mysql> select * from wp_posts limit 2; +----+-------------+---------------------+---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+---------------+--------------+------