『基礎からのiPhone SDK改訂版』おまけ

2010. 07. 30
『基礎からのiPhone SDK改訂版』まとめ(2)『基礎からのiPhone SDK改訂版』まとめ(3)の中で、概要を訳していないクラスがいくつかありましたので補填します。

訳していなかったのは訳すのが困難だったかららしく、いつにも増して怪しい訳になっていますので原文を読むことをお勧めします。


●Foundation関数

この章では、Foundationフレームワークで定義されている、関数および 関数のようなマクロを説明します。


●NSDictionaryクラス

NSDictionaryクラスは、キーと値の不変な関連付けを管理するオブジェクトのプログラムインターフェイスを宣言します。

このクラスまたはサブクラスのNSMutableDictionaryは、任意のキーに関連付けられたデータを便利に且つ効率的に取得する場合に使用します。

(便宜上、厳密な特定のクラスメンバを除いて、これらのクラスのインスタンスを辞書(dictionary)と呼びます)

辞書のキーと値のペアをエントリと呼びます。

各エントリの構成は、キーとキーの値となるオブジェクトで一つのオブジェクトとして表されます。

辞書内でキーは固有のものになります。

一つの辞書の中で、(isEqual:で確認できる)同じキーが2つ存在してはいけません。

キーは(NSCopyingプロトコルに準拠している)任意のオブジェクトを指定できますが、一般的にはキー値コーディングで使用できるよう、キーには文字列を使用します。
(『Key-Value Coding Fundamentals』参照)

キーも値もnilにすることはできません。

辞書内でnull値を表す場合は、NSNullを使用してください。

NSDictionaryのインスタンスは不変辞書で、エントリを確立して生成した後で変更することはできません。

NSMutableDictionaryのインスタンスは可変辞書で、いつでもエントリの追加や削除ができ、オブジェクトは自動的にメモリを必要に応じて割り当てます。

辞書クラスはNSCopyingとNSMutableCopyingプロトコルを採用しており、他の辞書の型を容易に変換することができます。

NSDictionaryとNSMutableDictionaryはクラスクラスタの一部で、このインターフェイスで生成したオブジェクトは、これら2つのクラスの実際のインスタンスではありません。

正確には、インスタンスはこれらのプライベートサブクラスの一つに属しています。

辞書のクラスはプライベートですがインターフェイスはパブリックで、NSDictionaryとNSMutableDictionaryの抽象的なスーパークラスで宣言されています。

辞書は内部的に、キーに一致する値に迅速にアクセスするため、ストレージの構成にハッシュテーブルを使用しています。

しかしハッシュテーブルやハッシュ関数、キーのハッシュ値などの作業は複雑なため。このクラスタのメソッドの定義からは隔離されています。

メソッドがハッシュ形式ではなく、キーを直接取得する方法を以下で説明します。

(全ての辞書における初期化の一部、または可変辞書における変更として)メソッドが辞書にエントリを追加する際、引数の各キーをコピーし、辞書にコピーを追加します。
(キーはNSCopyingプロトコルに準拠している必要があります)

対応する各値オブジェクトは、辞書に渡す前に解放されないようにretainメッセージを受け取ります。

列挙

辞書のコンテンツとして、keyEnumeratorとobjectEnumeratorで返されるNSEnumeratorオブジェクトを使って、キーや値を列挙することができます。

Mac OS X v10.5以降では、NSDictionaryはNSFastEnumerationプロトコルをサポートします。

辞書のキーをfor...inを使って列挙で構築する例を以下に示します。

NSArray *keys = [NSArray arrayWithObjects:@"key1", @"key2", @"key3", nil];
NSArray *objects = [NSArray arrayWithObjects:@"value1", @"value2", @"value3", nil];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

for (id key in dictionary) {
    NSLog(@"key: %@, value: %@", key, [dictionary objectForKey:key]);
}

Mac OS X v10.6以降ではNSDictionaryはブロックオブジェクトを使用した列挙をサポートしています。

基本的なメソッド

NSDictionaryの基本的な三つのメソッド(count、objectForKey:、keyEnumerator)は、他のメソッドのインターフェイスの全ての基礎を提供します。

countメソッドは辞書内のエントリ数を返します。

objectForKey:は指定したキーに関連する値を返します。

keyEnumeratorは辞書内の各キーを反復処理するオブジェクトを返します。

他のメソッドは、一つ以上の三つの基礎的なメソッドを呼び出すことによって処理の宣言をします。

基礎的なメソッド以外は、複数のエントリに一度にアクセスする便利な方法を提供します。

説明と永続性

description...とwriteToFile:atomicallyメソッドは、辞書のプロパティリストの説明に、それぞれ文字列とファイルを書き込むことができます。

これらは一般的に、カステムデータオブジェクトの永続的なストレージに使用されるものではありません。
(『Archives and Serializations Programming Guide』を参照してください)

Toll-Free Bridging

NSDictionaryには『toll-free bridged』の対象としてCore FoundationのCFDictionary Referenceがあります。

これはFoudationオブジェクトを橋渡ししてCore Foundationの型に変換し、関数やメソッドで呼び出せることを意味します。

したがってNSDictionary *パラメータを参照する際、CFDictionaryRefに渡し、CFDictionaryRefパラメータとして参照でき、(コンパイラの警告を抑えるために型変換をして)NSDictionaryインスタンスに渡すこともできます。

この橋渡しは、NSDictionaryの実際のサブクラスに適用されます。

型変換に関する詳細は『toll-free bridging』を参照してください。

サブクラス化

通常、NSDictionaryをサブクラス化する必要はあまりありません。

カスタマイズした動作が必要な場合、サブクラス化するより良い構成を検討してください。

NSDictionaryをサブクラス化する必要がある場合、クラスクラスタで表されていることを考慮に入れる必要があります。

したがって、基礎的な概念としていくつかの基本的なメソッド
count
objectForKey:
keyEnumerator
を、サブクラスでは全てオーバーライドする必要があります。

NSDictionaryの他のメソッドは、一つ以上のこれら基本的なメソッドを呼び出して処理します。

基礎的なメソッド以外は、複数のエントリに一度にアクセスする便利な方法を提供します。


●NSLocaleクラス

ロケールは、言語や文化、技術的な慣習や基準についての情報をカプセル化します。

ロケールがカプセル化する情報には数字の小数点で使われる記号や、日付などの書式を含みます。

ロケールは通常、ユーザの習慣や好みに基づいて、情報を解釈する書式を提供します。

ロケールはしばしばフォーマッタと共に使用されます。
(『Data Formatting Guide』を参照)

多くのロケールを使用することができますが通常はユーザが現在関連付けしている一つを使います。

NSLocaleには『toll-free bridged』の対象としてCore FoundationのCFLocaleがあります。

これはFoudationオブジェクトを橋渡ししてCore Foundationの型に変換し、関数やメソッドで呼び出せることを意味します。

したがってNSLocale *パラメータを参照する際、CFLocaleRefに渡し、CFLocaleRefパラメータとして参照でき、(コンパイラの警告を抑えるために型変換をして)NSLocaleインスタンスに渡すこともできます。

型変換に関する詳細は『toll-free bridging』を参照してください。


●NSURLクラス

NSURLクラスは、URLと参照するリソースを処理する方法を提供します。

NSURLオブジェクトは、RFC 1808、1738、2732で指定されているURLを解釈します。

RFC 1808が推奨する、RFC 1808に準拠しているかどうかの判別法は、resourceSpecifierの最初の二文字が@"//"であるかどうかです。

NSURLオブジェクトはファイルの参照に使用することができ、この方法が推奨されています。

ApplicationKitオブジェクトは一般的に、ファイルからのデータの読み込みやファイルへのデータの書き込みを行うメソッドを持っていますが、NSURLオブジェクトがファイル参照のパス名を代わりに受け入れます。

NSWorkspaceは、URLで指定されている場所を開くopenURL:を提供します。

NSStringが提供するstringWithContentsOfURL:やNSDataが提供するdataWithContentsOfURL:で、URLのコンテンツを取得します。

NSURLオブジェクトは二つの部分で構成されており、潜在的にnilベースのURLとベースURLに関連して決定される文字列から成ります。

NSURLオブジェクトのベースを除いた完全に決定された文字列は絶対的なもので、他の全ては相対的なものです。

NSURLクラスは、NSURLオブジェクトを新たに生成する際に的確なパスを渡さないと失敗します。
(パスはRFC 2396を満たす必要があります)

例えば、空白文字や高ビット文字を含む文字列は成功しません。

NSURLオブジェクトの生成に失敗すると生成メソッドはnilを返すので、対応する処理を準備する必要があります。

ファイルシステムパスを使ってNSURLオブジェクトを生成する際、fileURLWithPath:またはinitFileURLWithPath:を使うことができ、URLパスとファイルシステムパスの微妙な差異を処理できます。

不正なパス文字列への耐性を持たせたい場合は、Core Foundationフレームワークの提供する文字列を仕上げる関数を使用する必要があります。

NSURLConnectionとNSURLDownloadクラスには、バックグラウンドでURLリソースを読み込む有用なメソッドが定義されています。

詳細は『URL Loading System Programming Guide』を参照してください。

また、アプリケーションキットフレームワーク内のNSURL追加リファレンスに、ペーストボードをサポートする追加メソッドがあります。

NSURLには『toll-free bridged』の対象としてCore FoundationのCFURL Referenceがあります。

これはFoudationオブジェクトを橋渡ししてCore Foundationの型に変換し、関数やメソッドで呼び出せることを意味します。

したがってAPIでNSURL *パラメータを参照する際、CFURLRefに渡し、APIはCFURLRefパラメータとして参照でき、(コンパイラの警告を抑えるために型変換をして)NSURLインスタンスにポインタを渡すこともできます。

この方法はまた、実際のNSURLのサブクラスにも適用されます。

型変換に関する詳細は『toll-free bridging』を参照してください。


●NSURLProtectionSpaceクラス

NSURLProtectionSpaceは、サーバまたはサーバ上のエリアにある領域を表し、一般的に参照するには認証を要求されます。

保護領域内への全てのリクエストにNSURLProtectionSpaceの証明書が適用されます。


●NSURLRequestクラス

NSURLRequestオブジェクトは、プロトコルから独立した方法でのURLの読み込み要求とURLスキームを表します。

NSURLRequestは、URLの読み込みと、URLコンテンツを使用するためのキャッシュ作成の実装についてのポリシーといった、URLの読み込み要求に二つの基本的なデータ要素カプセル化します。

NSURLRequestは、NSURLProtocolのpropertyForKey:inRequest:とsetProperty:forKey:inRequest:メソッドを使って、プロパティオブジェクトからプロトコル固有の値にアクセスする、追加カテゴリによる追加プロトコルをサポートする拡張ができる設計になっています。

NSURLRequestの可変サブクラスはNSMutableURLRequestです。


●UIControlクラス

UIControlは制御の基礎となるクラスで、ボタンやスライダなど、アプリケーションにユーザの意図を伝えるために使用されます。

UIControlのインスタンスを直接制御に使用することはできません。

その代わり全てのサブクラスについて、共通のインターフェイスと動作の構造体を定義します。

UIControlの主な役割は、アクションメッセージを準備するための基礎となる実装と、指定したイベントが発生した時に最初にターゲットにディスパッチするインターフェイスを定義することです。
(『Target-Action in UIKit』の概要を参照)

また、(制御の有効や強調を決定などのための)制御状態の設定と取得をするメソッドと、(後でメソッドのグループのサブクラスによるオーバーライドのために)制御中にタッチの追跡を行うメソッドの定義を含みます。

ターゲット−アクションメカニズム

UIKitフレームワークのターゲット−アクションメカニズムの設計は、マルチタッチイベントモデルに基づいています。

iOSは、(マウスのクリックやドラッグの代わりに)ユーザの指(またはタッチ)により意図を伝達し、異なる接触をいつでも制御するマルチタッチがあります。

UIControl.hヘッダファイルは、『Control Events』で説明されているビットマスクの定数で、制御イベントを多数宣言しています。

いくつかの制御イベントは、コントロールの中と周囲にタッチする動作を指定しており、コントロールに指を降ろしてタッチする、コントロールの外から中にまたは中から外にドラッグするなど、様々なアクションの組み合わせがあります。

他の制御イベントとして、テキストフィールドに指を降ろしてタッチした時に、編集フェーズの開始が指定されています。

またUIControlEventValueChangedは、スライダなどのコントロール上の操作を連続した値の変化として受け取ります。

特定のアクションメッセージの場合は、指定した一つ以上の制御イベントをトリガとして、メッセージを送信することができます。

例えば、コントロールに指を降ろしてタッチするか中にドラッグした場合(UIControlEventTouchDown | UIControlEventTouchDragEnter)に、特定のターゲットに特定のアクションメッセージを送信することができます。

アクションメッセージを送信するためのコントロールの準備には、各ターゲット−アクションのペアごとにaddTarget:action:forControlEvents:の呼び出しを指定します。

このメソッドは、制御イベントに各ターゲット−アクションのペアを関連付けしたディスパッチテーブルを内部に構築します。

ユーザがコントロールにタッチした方法の中に、指定したイベントが一つ以上一致した場合は、UIControlがsendActionsForControlEvent:を送信します。

その結果UIControlはsendAction:to:from:forEvent:メッセージのUIApplicationにアクションを送信します。

UIApplicationはアクションメッセージのディスパッチポイントを中央に集め、アクションメッセージのターゲットにnilが指定されている場合は、アクションメッセージを処理するオブジェクトが見つかるまでレスポンダチェーンを逆上り、アプリケーションはファーストレスポンダにアクションを送信します。

つまり、アクションセレクタに対応するメソッドを実装するオブジェクトです。

UIKitは三つの異なる形体のアクションセレクタを提供します。

- (void)action
- (void)action:(id)sender
- (void)action:(id)sender forEvent:(UIEvent *)event

UIApplicationのsendAction:to:fromSender:forEvent:メソッドは、ターゲットを呼び出す時に二つのパラメータを送信します。

最後の二つのパラメータはアプリケーションのためのオプションで、呼び出し元(通常はUIControlオブジェクト)で任意のパラメータを削除するために追加されています。

サブクラス化の注意

UIControlをサブクラス化して拡張するのには、二つの基本的な理由があります。

・特定のイベントのターゲットとして、アクションメッセージのディスパッチを監視または変更する場合。

この場合、sendAction:to:forEvent:をオーバーライドし、セレクタ、ターゲットオブジェクト、またはビットマスクを必要に応じて評価します。

・強調の外観を変更するなど、動作をカスタマイズして提供する場合。

この場合、以下のメソッド一つまたは全てをオーバーライドします。
beginTrackingWithTouch:withEvent:
continueTrackingWithTouch:WithEvent:
endTrackingWithTouch:with:Event:



参考文献

Foundation Functions Reference

NSDictionary Class Reference

NSLocale Class Reference

NSURL Class Reference

NSURLProtectionSpace Class Reference

NSURLRequest Class Reference

UIControl Class Reference

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る

『基礎からのiPhone SDK改訂版』まとめ(3)

2010. 07. 28
基礎からのiPhone SDK 改訂版』で勉強してきた過程で、説明用に訳したクラスの概要とメソッドの解説の一覧の続きです。

字数制限の都合上、メソッドの解説がクラスの概要と同ページの場合は、メソッドにリンクを張っていないので予めご了承ください。


●UIActionSheetクラスメモ帳の作成(5)~アクションシート
・initWithTitle:delegate:cancelButtonTitle:destructiveButtonTitle:otherButtonTitles:
・showInView:


●UIActionSheetDelegateプロトコルメモ帳の作成(5)~アクションシート
・actionSheet:clickedButtonAtIndex:


●UIActivityIndicatorViewクラスウェブブラウザの使用しているクラス
・isAnimating(ウェブブラウザのデリゲート
・startAnimating(ウェブブラウザのデリゲート
・stopAnimating(ウェブブラウザのデリゲート


●UIAlertViewクラスメモ帳の作成(6)~アラート
・initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:
・show


●UIAlertViewDelegateプロトコルメモ帳の作成(6)~アラート
・alertView:clickedButtonAtIndex:


●UIApplicationクラスフルスクリーン化で使用しているクラス(3)
・idleTimerDisabled(トランジションアニメーション(1)
・openURL:(メモ帳の作成(6)~アラート
・setStatusBarHidden:animated:(スライドショーの簡易アニメーション(1)
・setStatusBarHidden:withAnimation:(スライドショーの簡易アニメーション(2)
・sharedApplication(スライドショーのフルスクリーン化(2)
・statusBarHidden(スライドショーのフルスクリーン化(2)
・UIStatusBarAnimation(スライドショーの簡易アニメーション(2)


●UIApplicationDelegateプロトコルUIApplicationDelegateプロトコル
・applicationDidBecomeActive:
・application:didChangeStatusBarFrame:
・application:didChangeStatusBarOrientation:
・application:didFailToRegisterForRemoteNotificationsWithError:
・applicationDidFinishLaunching:
・application:didFinishLaunchingWithOptions:
・applicationDidReceiveMemoryWarning:
・application:didReceiveRemoteNotification:
・application:didRegisterForRemoteNotificationsWithDeviceToken:
・application:handleOpenURL:
・applicationSignificantTimeChange:
・application:willChangeStatusBarFrame:
・application:willChangeStatusBarOrientation:duration:
・applicationWillResignActive:
・applicationWillTerminate:


●UIBarButtonItemクラスウェブブラウザの使用しているクラス


●UIBarItemクラスウェブブラウザの使用しているクラス
・enable(ウェブブラウザのデリゲート


●UIButtonクラススライドショーの使用しているクラス(1)
・setBackgroundImage:forState:(スライドショーのメソッド(2)
・setTitle:forState:(スライドショーのメソッド(3)


●UIControlクラス『基礎からのiPhone SDK改訂版』おまけ
・UIControlState(スライドショーのメソッド(2)
・Control State(スライドショーのメソッド(2)


●UIFontクラスメモ帳の作成(3)~フォント
・familyNames(メモ帳の作成(3)~フォント
・fontNamesForFamilyName:(メモ帳の作成(3)~フォント
・fontWithName:size:(メモ帳の作成(4)~ピッカービュー


●UIImageクラススライドショーの使用しているクラス(2)
・imageNamed:(スライドショーのメソッド(1)
・stretchableImageWithLeftCapWidth:topCapHeight:(スライドショーのメソッド(2)


●UIImageViewクラススライドショーの使用しているクラス(1)
・animationDuration(スライドショーのメソッド(2)
・animationImages(スライドショーのメソッド(2)
・animationRepeatCount(スライドショーのメソッド(2)
・image(トランジションアニメーション(1)
・isAnimating(スライドショーのメソッド(3)
・startAnimating(スライドショーのメソッド(3)
・stopAnimating(スライドショーのメソッド(3)


●UIPickerViewクラスメモ帳の作成(4)~ピッカービュー
・selectedRowInComponent:(メモ帳の作成(4)~ピッカービュー
・selectRow:inComponent:animated:(メモ帳の作成(7)~設定値の保存


●UIPickerViewDataSourceプロトコルメモ帳の作成(4)~ピッカービュー
・numberOfComponentsInPickerView:
・pickerView:didSelectRow:inComponent:
・pickerView:numberOfRowsInComponent:


●UIPickerViewDelegateプロトコルメモ帳の作成(4)~ピッカービュー
・pickerView:titleForRow:forComponent:
・pickerView:widthForComponent:


●UIResponderクラスフルスクリーン化で使用しているクラス(2)
・resignFirstResponder(メモ帳の作成(2)~テキストビュー
・touchesEnded:withEvent:(スライドショーのフルスクリーン化(2)


●UISegmentedControlクラススライドショーの使用しているクラス(1)
・selectedSegmentIndex(スライドショーのメソッド(1)


●UISliderクラススライドショーの使用しているクラス(1)
・value(スライドショーのメソッド(2)


●UITextFieldクラスウェブブラウザの使用しているクラス
・text(ウェブブラウザのアクションメソッド


●UITextViewクラスメモ帳の作成(2)~テキストビュー


●UITextViewDelegateプロトコルメモ帳の作成(2)~テキストビュー
・textViewDidBeginEditing:
・textViewDidEndEditing:


●UIToolbarクラスウェブブラウザの使用しているクラス


●UITouchクラスフルスクリーン化で使用しているクラス(2)
・tapCount(スライドショーのフルスクリーン化(2)


●UIViewクラスフルスクリーン化で使用しているクラス(1)
・addSubview:(音楽プレイヤのメソッド(1)
・alpha(スライドショーの簡易アニメーション(1)
・animateWithDuration:animations:(トランジションアニメーション(2)
・animateWithDuration:animations:completion:(トランジションアニメーション(2)
・animateWithDuration:delay:options:animations:completion:(トランジションアニメーション(2)
・beginAnimations:context:(スライドショーの簡易アニメーション(1)
・center(スライドショーの簡易アニメーション(1)
・commitAnimations(スライドショーの簡易アニメーション(1)
・drawRect:(スライドショーのフルスクリーン化(2)
・frame(スライドショーの簡易アニメーション(2)
・hidden(スライドショーのフルスクリーン化(2)
・initWithFrame:(スライドショーのフルスクリーン化(2)
・removeFromSuperview(音楽プレイヤのメソッド(2)
・setAnimationDuration:(トランジションアニメーション(1)
・setAnimationsEnabled:(スライドショーの簡易アニメーション(1)
・setAnimationTransition:forView:cache:(トランジションアニメーション(1)
・transform(スライドショーの簡易アニメーション(3)
・transitionFromView:toView:duration:options:completion:(トランジションアニメーション(2)
・transitionWithView:duration:options:animations:completion:(トランジションアニメーション(2)
・UIViewAnimationOptions(トランジションアニメーション(2)
・UIViewAnimationTransition(トランジションアニメーション(1)


●UIWebViewクラスウェブブラウザの使用しているクラス
・canGoBack(ウェブブラウザのデリゲート
・canGoForward(ウェブブラウザのデリゲート
・loading(ウェブブラウザのデリゲート
・loadRequest:(ウェブブラウザのアクションメソッド
・request(ウェブブラウザのデリゲート


●UIWebViewDelegateプロトコルUIWebViewDelegateプロトコル
・webView:shouldStartLoadWithRequest:navigationType:
・webViewDidStartLoad:
・webViewDidFinishLoad:
・webView:didFailLoadWithError:



参考文献

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る

『基礎からのiPhone SDK改訂版』まとめ(2)

2010. 07. 28
基礎からのiPhone SDK 改訂版』で勉強してきた過程で、説明用に訳したクラスの概要とメソッドの解説の一覧です。

字数制限の都合上、メソッドの解説がクラスの概要と同ページの場合は、メソッドにリンクを張っていないので予めご了承ください。


●AVAudioPlayerクラスCore Audioの復習
・delegate(クロックに時報を追加する
・initWithContentsOfURL:error:(クロックに時報を追加する


●AVAudioPlayerDelegateプロトコルクロックに時報を追加する
・AudioPlayerBeginInterruption:
・audioPlayerDecodeErrorDidOccur:error:
・audioPlayerDidFinishPlaying:successfully:
・audioPlayerEndInterruption:


●CGAffineTransformスライドショーの簡易アニメーション(3)
・CGAffineTransformIdentity
・CGAffineTransformISIdentity
・CGAffineTransformMakeRotation
・CGAffineTransformScale


●CGGeometryスライドショーの簡易アニメーション(1)
・CGRectGetHeight


●Foundation関数『基礎からのiPhone SDK改訂版』おまけ
・NSLocalizedString(メモ帳の作成(8)~ローカライズ


●Media Playerフレームワーク音楽プレイヤで使用しているクラス


●MPMediaItemクラス音楽プレイヤで使用しているクラス
・General Media Item Property Keys(音楽プレイヤのメソッド(2)
・valueForProperty(音楽プレイヤのメソッド(2)


●MPMediaItemArtworkクラス音楽プレイヤで使用しているクラス
・imageWithSize:(音楽プレイヤのメソッド(2)


●MPMediaPlaylistクラス音楽プレイヤで使用しているクラス
・Playlist Property Keys(指定したプレイリストの再生
・valueForProperty(指定したプレイリストの再生


●MPMediaPropertyPredicateクラス検索条件によるクエリの絞り込み
・Media Property Predicate Comparison Types
・predicateWithValue:forProperty:comparisonType:


●MPMediaQueryクラスアプリケーション音楽プレイヤ
・addFilterPredicate:(検索条件によるクエリの絞り込み
・artistsQuery(アプリケーション音楽プレイヤ
・collections(指定したプレイリストの再生
・playlistsQuery(指定したプレイリストの再生


●MPMusicPlayerControllerクラス音楽プレイヤで使用しているクラス
・applicationMusicPlayer(アプリケーション音楽プレイヤ
・beginGeneratingPlaybackNotifications(音楽プレイヤのメソッド(1)
・currentPlaybackTime(音楽プレイヤのメソッド(1)
・endGeneratingPlaybackNotifications(音楽プレイヤのメソッド(2)
・iPodMusicPlayer(音楽プレイヤのメソッド(1)
・MPMusicPlayerControllerNowPlayingItemDidChangeNotification(音楽プレイヤのメソッド(1)
・nowPlayingItem(音楽プレイヤのメソッド(2)
・pause(音楽プレイヤのメソッド(1)
・play(音楽プレイヤのメソッド(1)
・playbackState(音楽プレイヤのメソッド(1)
・Playback States(音楽プレイヤのメソッド(1)
・repeatMode(音楽プレイヤのメソッド(1)
・Repeat Modes(音楽プレイヤのメソッド(1)
・setQueueWithItemCollection:(指定したプレイリストの再生
・setQueueWithQuery:(アプリケーション音楽プレイヤ
・shuffleMode(音楽プレイヤのメソッド(1)
・Shuffle Modes(音楽プレイヤのメソッド(1)
・skipToBeginning(音楽プレイヤのメソッド(1)
・skipToNextItem(音楽プレイヤのメソッド(1)
・skipToPreviousItem(音楽プレイヤのメソッド(1)


●NSArrayクラススライドショーの使用しているクラス(2)
・array(スライドショーの画像配列をXML化
・arrayWithContentsOfFile:(スライドショーの画像配列をXML化
・arrayWithObjects:(スライドショーのメソッド(1)
・count(スライドショーのメソッド(1)
・indexOfObject:(メモ帳の作成(7)~設定値の保存
・objectAtIndex:(スライドショーの画像配列をXML化


●NSCalendarクラスクロックでカレンダーを指定する
・initWithCalendarIdentifier:


●NSDateクラスクロックの使用しているクラス
・date(スライドショーのメソッド(1)
・timeIntervalSinceReferenceDate(スライドショーのメソッド(1)


●NSDateFormatterクラスクロックの使用しているクラス
・init(クロックのメソッド
・NSDateFormatterStyle(クロックのメソッド
・setCalendar:(クロックでカレンダーを指定する
・setDateFormat:(クロックでカレンダーを指定する
・setDateStyle:(クロックのメソッド
・setLocale:(クロックでロケールを指定する
・setTimeStyle:(クロックのメソッド
・stringFromDate:(クロックのメソッド


●NSDictionaryクラス『基礎からのiPhone SDK改訂版』おまけ
・dictionaryWithObjectsAndKeys:(メモ帳の作成(7)~設定値の保存


●NSLocaleクラス『基礎からのiPhone SDK改訂版』おまけ
・initWithLocaleIdentifier:(クロックでロケールを指定する
・NSLocale Calendar Keys(クロックでカレンダーを指定する


●NSMutableArrayクラススライドショーの使用しているクラス(2)
・addObject:(スライドショーの画像配列をXML化
・addObjectsFromArray:(メモ帳の作成(3)~フォント
・exchangeObjectAtIndex:withObjectAtIndex:(スライドショーのメソッド(1)


●NSNotificationクラス音楽プレイヤで使用しているクラス
・name(音楽プレイヤのメソッド(2)


●NSNotificationCenterクラス音楽プレイヤで使用しているクラス
・addObserver:selector:name:object:(音楽プレイヤのメソッド(1)
・defaultCenter(音楽プレイヤのメソッド(1)
・removeObserver:(音楽プレイヤのメソッド(2)


●NSObjectクラスフルスクリーン化で使用しているクラス(3)
・awakeFromNib(スライドショーのメソッド(2)
・init(クロックに独自クラスを導入する(2)
・performSelector:withObject:afterDelay:(スライドショーのフルスクリーン化(2)


●NSSetクラスフルスクリーン化で使用しているクラス(2)
・anyObject(スライドショーのフルスクリーン化(2)


●NSTimerクラスクロックの使用しているクラス
・invalidate(トランジションアニメーション(1)
・setFireDate:(クロックに時報を追加する


●NSTimeZoneクラスクロックに独自クラスを導入する(1)
・abbreviationDictionary(クロックに独自クラスを導入する(5)
・systemTimeZone(クロックに独自クラスを導入する(2)
・timeZoneWithAbbreviation:(クロックに独自クラスを導入する(5)


●NSURLクラス『基礎からのiPhone SDK改訂版』おまけ
・absoluteString(ウェブブラウザのデリゲート
・fileURLWithPath:(クロックに時報を追加する
・URLWithString:(ウェブブラウザのアクションメソッド


●NSURLProtectionSpaceクラス『基礎からのiPhone SDK改訂版』おまけ
・host(ウェブブラウザのデリゲート


●NSURLRequestクラス『基礎からのiPhone SDK改訂版』おまけ
・requestWithURL:(ウェブブラウザのアクションメソッド
・URL(ウェブブラウザのデリゲート


●NSUserDefaultsクラスメモ帳の作成(7)~設定値の保存
・integerForKey:
・registerDefaults:
・setObject:forKey:
・standardUserDefaults
・stringForKey:



参考文献

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る

『基礎からのiPhone SDK改訂版』まとめ(1)

2010. 07. 28
これまで勉強してきた『基礎からのiPhone SDK 改訂版』についてのまとめです。

本書と当サイトの記事の関係は以下の通りです。

本書の章立てと当ブログのまとめ方が異なるので、細かい章や節には対応していません。

CHAPTER 01
iPhone OS/iPhone SDK概要
-
CHAPTER 02
iPhone OS機能カタログ
-
CHAPTER 03
初めてのアプリケーション開発

270
『基礎からのiPhone SDK改訂版』を始めてみた
 
CHAPTER 04
Objective-C入門
−ウェブブラウザ基礎編−

271
ウェブブラウザの作成
ウェブブラウザの使用しているクラス
ウェブブラウザのアクションメソッド
UIApplicationDelegateプロトコル
UIWebViewDelegateプロトコル
ウェブブラウザのデリゲート
ウェブブラウザのサンプルコードの補足
CHAPTER 05
メモリ管理
−デジタル時計の作成−

335
言語環境の用語
言語環境の言語
言語環境の書式
クロックの作成
クロックの使用しているクラス
クロックのメソッド
クロックでロケールを指定する
クロックでカレンダーを指定する
日付フォーマットのパターン
Core Audioの復習
クロックに時報を追加する
クロックに独自クラスを導入する(1)
クロックに独自クラスを導入する(2)
クロックに独自クラスを導入する(3)
クロックに独自クラスを導入する(4)
クロックに独自クラスを導入する(5)
クロックに独自クラスを導入する(6)
CHAPTER 06
ビューとイベント
−スライドショーの作成−

397
スライドショーの作成
スライドショーの使用しているクラス(1)
スライドショーの使用しているクラス(2)
スライドショーのメソッド(1)
スライドショーのメソッド(2)
スライドショーのメソッド(3)
スライドショーの画像配列をXML化
スライドショーのフルスクリーン化(1)
スライドショーのフルスクリーン化(2)
フルスクリーン化で使用しているクラス(1)
フルスクリーン化で使用しているクラス(2)
フルスクリーン化で使用しているクラス(3)
スライドショーの簡易アニメーション(1)
スライドショーの簡易アニメーション(2)
スライドショーの簡易アニメーション(3)
トランジションアニメーション(1)
トランジションアニメーション(2)
トランジションアニメーション(3)
トランジションアニメーション(4)
自前トランジション
CHAPTER 07
設定とローカライズ
−メモ帳の作成−

474
メモ帳の作成(1)
メモ帳の作成(2)~テキストビュー
メモ帳の作成(3)~フォント
メモ帳の作成(4)~ピッカービュー
メモ帳の作成(5)~アクションシート
メモ帳の作成(6)~アラート
メモ帳の作成(7)~設定値の保存
メモ帳の作成(8)~ローカライズ
CHAPTER 08
iPodライブラリアクセス+音楽プレイヤー

553
音楽プレイヤの作成
音楽プレイヤで使用しているクラス
音楽プレイヤのメソッド(1)
音楽プレイヤのメソッド(2)
アプリケーション音楽プレイヤ
検索条件によるクエリの絞り込み
指定したプレイリストの再生


●『基礎からのiPhone SDK改訂版』総評

『基礎からのiPhone SDK改訂版』を始めてみた』でも書きましたが、統合開発環境とC言語を扱っているのが前提とはいえ、『iPhone SDKの教科書』で勉強されている方はすんなり入れる内容です。

序盤は事細かに解説されていて親切ですが、それだけに『CHAPTER 07 設定とローカライズ
−メモ帳の作成−』のサンプルコードが別物で参考にならない点や、終盤の細かい説明が端折られている点が気になります。
(その辺を自分で補えるようになっていないとダメだと言われればそれまでですが・・・)

『CHAPTER 06 ビューとイベント−スライドショーの作成−』のトランジションアニメーションに関しては、SDKのバージョンアップにより古い内容になっているので注意してください。
(対策は『トランジションアニメーション(2)』を参照してください)

細かい不備はありますが、人にお勧めできる良書です。



参考文献

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る

指定したプレイリストの再生

2010. 07. 27
最後にプレイリスト名を指定した再生をしてみます。

599


●指定されたプレイリスト名をキューに登録

プレイリスト名を引数として受け取り、デバイスのクエリ中の全プレイリストと照合して、合致した場合にキューに登録します。

awakeFromNibメソッドの前に、指定されたプレイリスト名をキューに登録するsetQueueWithPlaylist:メソッドを追加します。

- (void)setQueueWithPlaylist:(NSString *)name {
    // プレイリストでグループ化するクエリを生成
    MPMediaQuery *query = [MPMediaQuery playlistsQuery];

    // 曲の一覧を取得
    NSArray *playlists = query.collections;

    // 全てのグループについてプレイリスト名を比較
    for (MPMediaPlaylist *playlist in playlists) {
        // プレイリスト名を取得
        NSString *plName = [playlist valueForProperty:MPMediaPlaylistPropertyName];

        // プレイリスト名が一致したら、キューに登録
        if ([plName isEqualToString:name]) {
            [player setQueueWithItemCollection:playlist];
            break;
        }
    }
}

600


・playlistsQuery
(MPMediaQueryクラス)

+ (MPMediaQuery *)playlistsQuery

プレイリスト名で適合するiPodライブラリとグループ、ソートコレクションによるメディアクエリを生成します。

戻り値は、適合する全てのメディアアイテムとMPMediaGroupingPlaylistのグルーピングタイプのメディアクエリです。


・collections
(MPMediaQueryクラス)

@property (nonatomic, readonly) NSArray *collections;

クエリのメディアプロパティ述語と適合するアイテムを含む、メディアアイテムコレクションの配列です。

メディアクエリのgroupingTypeでソートされた、グループ化されたコレクションの配列を返します。

このプロパティを使ったコードを以下に示します。

// メディアクエリの指定:
// メディアプロパティ述語を含まないため、iPodライブラリ全体になります
MPMediaQuery *everything = [[MPMediaQuery alloc] init];


// メディアクエリにメディアアイテムのグループを構成:ここではアーティストでグループ化
[everything setGroupingType: MPMediaGroupingArtist];


// キューからメディアアイテムコレクションの取得
NSArray *collections = [everything collections];

collections配列の各要素は、現在メディアアイテムコレクションが含まれます。

各コレクションは、特定のアーティストによるiPodライブラリのメディアアイテムが含まれます。

配列の要素はアーティスト名でソートされています。

使用できるグループタイプはについては『Media Item Collection Grouping Keys』を参照してください。


・valueForProperty
(MPMediaPlaylistクラス)

- (id)valueForProperty:(NSString *)property

指定したプレイリストのプロパティキーの値を取得します。

戻り値は、メディアアイテムのpropertyキーの値を返します。

詳細は『Property Keys』を参照してください。

property:対応する値を取得するためのプロパティキーを指定します。


・Playlist Property Keys
(MPMediaPlaylistクラス)

これらのキーをcanFilterByProperty:やvalueForProperty:メソッドで使うと、プレイリストに関する情報を取得できます。

『filterable』と示しているプロパティは、メディアプロパティ述語の構築に使用することができます。
(詳細は『MPMediaPropertyPredicate Class Reference』を参照)

NSString*constMPMediaPlaylistPropertyPersistentID;// Filterable
NSString*constMPMediaPlaylistPropertyName;// Filterable
NSString*constMPMediaPlaylistPropertyPlaylistAttributes;// Filterable
NSString*constMPMediaPlaylistPropertySeedItems; 

MPMediaPlaylistPropertyPersistentID
プレイリストの永続的な識別子です。
値はuint64_t(unsigned long long)のNSNumberオブジェクトです。
メディアプロパティ述語の構築に使用することができます。
(詳細は『MPMediaQuery Class Reference』を参照してください)

MPMediaPlaylistPropertyName
プレイリストの名前です。
値はNSStringオブジェクトです。
メディアプロパティ述語の構築に使用することができます。
(詳細は『MPMediaQuery Class Reference』を参照してください)

MPMediaPlaylistPropertyPlaylistAttributes
プレイリストに関連付けされた属性です。
値はNSIntegerデータ型のNSNumberオブジェクトです。
プレイリストの属性はNSIntegerのフィールドで識別します。
プレイリストにはいくつかの属性の組み合わせが有り、詳細は『Playlist Attribute Flags』を参照してください。
メディアプロパティ述語の構築に使用することができます。
(詳細は『MPMediaQuery Class Reference』を参照してください)

MPMediaPlaylistPropertySeedItems
プレイリストを生成するアイテムのシード(種)で、Geniusプレイリストでのみ適用されます。
値は一つ以上のMPMediaItemオブジェクトを含むNSArrayオブジェクトです。
MPMediaPlaylistAttributeGeniusフラグを設定していない場合、プレイリストの値はnilになります。


・setQueueWithItemCollection:
(MPMusicPlayerControllerクラス)

- (void)setQueueWithItemCollection:(MPMediaItemCollection *)itemCollection

メディアアイテムコレクションを使って、音楽プレイヤの再生キューに設定します。

再生キューが確立された後で、playを呼び出して再生を開始します。

itemCollection:再生キューに必要なメディアアイテムコレクションを指定します。
メディアアイテムコレクションとその使い方については『MPMediaItemCollection Class Reference』を参照してください。


●awakeFromNibからの呼び出し

awakeFromNibメソッドからsetQueueWithPlaylist:メソッドを呼び出すように修正します。
(太字が修正した部分)

- (void)awakeFromNib {
    // スーパークラスによる初期化
    [super awakeFromNib];

    // アプリケーション自身で音楽再生を行う
    player = [MPMusicPlayerController applicationMusicPlayer];

    [self setQueueWithPlaylist:@"ミンゴス"];

    // 音楽再生
    player.repeatMode = MPMusicRepeatModeAll;    // 全曲リピートに設定
    player.shuffleMode = MPMusicShuffleModeOff;    // シャッフル無しに設定
    [player play];    // 再生開始

    // 制御パネルの表側を貼り付ける
    [viewPlace addSubview:viewMainSide];

    // 現在再生中の曲の情報を画面に表示する
    [self updateView];

    // 通知センターのインスタンスを取得
    NSNotificationCenter *noteCenter = [NSNotificationCenter defaultCenter];

    // 再生曲が変化した時の通知先を登録
    [noteCenter addObserver:self selector:@selector(didItemChanged:) name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification object:player];

    // 通知の開始を指示
    [player beginGeneratingPlaybackNotifications];
}

601

プレイリスト名として『ミンゴス』と指定して、setQueueWithPlaylist:メソッドを呼び出しています。

該当するプレイリスト名が無い場合は再生されません。

602



参考文献

MPMediaQuery Class Reference

MPMediaPlaylist Class Reference

MPMusicPlayerController Class Reference

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る






Wave SoundTouch music system IV
Calendar
06 | 2017/07 | 08
Sun Mon Tue Wed Thu Fri Sat
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Wave SoundTouch music system IV
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR