Foundation(初期設定)

2010. 04. 12
新版の『iPhone SDK 3 プログラミング大全』では修正されているのかもしれませんが、手元の旧版(第1版第2刷)ではクラス図が『初期設定』ではなく『ノーティフィケーション』になっています。


●初期設定のクラス図

Foundation
NSUserDefaults 

// NSUserDefaultsのインスタンスを取得
NSUserDefaults *usrDefaults = [NSUserDefaults standardUserDefaults];

// 初期設定値を保存
[usrDefaults setBool:YES forKey:@"initialized"];
[usrDefaults setInteger:72 forKey:@"userID"];
[usrDefaults setObject:@"Chihaya" forKey:@"userName"];

// 設定値の出力
NSLog([NSString stringWithFormat:@"BOOL:%d, Int:%d, Object:%@", [usrDefaults boolForKey:@"initialized"], [usrDefaults integerForKey:@"userID"], [usrDefaults objectForKey:@"userName"]]);
//    BOOL:1, Int:72, Object:Chihaya

iPhone Simulatorを使用している場合、/Users/(ユーザ名)/Library/Application Support/iPhone Simulator/3.1.3/Applications/(略)/Library/Preferences/に逆DNSのプロパティリストとして保存されています
(デフォルト設定でのインストール、Simulator 3.1.3使用時)

info.plistの設定で、『Bundle identifier:com.yourcompany.${PRODUCT_NAME:identifier}』、『Bundle display name:HelloWorld』の場合、com.yourcompany.HelloWorld.plistというファイル名になります

217


・standardUserDefaults

+ (NSUserDefaults *)standardUserDefaults

共有のデフォルトオブジェクトを返します

共有のデフォルトオブジェクトがまだ無い場合は、以下の順でドメイン名を含む検索リストから作成されます
(ドメインはデフォルトドメインとも呼ばれる、ユーザデフォルトのグループを指します)

・NSArgumentDomain(引数ドメイン)
アプリケーション起動時の引数をデフォルト値として構成します

・NSGlobalDomain(グローバルドメイン)
全てのアプリケーションに共通するデフォルト値で構成されます

・NSRegistrationDomain(登録ドメイン)
他のデフォルト値が何も設定されていない際に、一時的に設定されるデフォルト値で構成されます
初回起動時に必ず読まれる、現在のユーザ用に初期化するデフォルト値です


・setBool:forKey:

- (void)setBool:(BOOL)value forKey:(NSString *)defaultName

デフォルトのBOOL値と対応するキーを設定します
setObject:forKeyの機能の一部として呼び出します

value:デフォルトのデータベースへ設定するBOOL値を指定します

defaultName:BOOL値に対応するキーを設定します


・setInteger:forKey:

- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName

デフォルトのint値と対応するキーを設定します
setObject:forKeyの機能の一部として呼び出します

value:デフォルトのデータベースへ設定するint値を指定します

defaultName:int値に対応するキーを設定します


・setObject:forKey:

- (void)setObject:(id)value forKey:(NSString *)defaultName

標準アプリケーションドメインへ値と対応するキーを設定します

valueで設定できる値はプロパティリストのオブジェクト(NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary)に限定されます

NSArrayとNSDictionaryオブジェクトはプロパティリストオブジェクトを格納していなければなりません(詳細は『Property List Programming Guide』の『What is a Property List?』を参照)

検索リストのアプリケーションドメインで、同じキーで既に登録されていた場合は、このメソッドは無効となります

value:デフォルトのデータベースへ設定するオブジェクトを指定します

defaultName:オブジェクトに対応するキーを設定します


・boolForKey:

- (BOOL)boolForKey:(NSString *)defaultName

指定したキーに対応するBOOL値を返します
指定したキーが異なる場合はNOを返します

defaultName:現在のユーザのデフォルトデータベースの中にあるキーを指定します


・integerForKey:

- (NSInteger)integerForKey:(NSString *)defaultName

指定したキーに対応するint値を返します
指定したキーが存在しない場合は0を返します

defaultName:現在のユーザのデフォルトデータベースの中にあるキーを指定します


・objectForKey

- (id)objectForKey:(NSString *)defaultName

デフォルトの中で最初に発見した、指定したキーに対応するオブジェクトを返します
指定したキーに対応するオブジェクトが無い場合はnilを返します

このメソッドは検索リストの順でドメインを検索します

元が可変オブジェクトの場合であっても、戻り値は固定オブジェクトになります

defaultName:現在のユーザのデフォルトデータベースの中にあるキーを指定します

// NSDictionaryを作成
NSMutableDictionary *usrPlist = [NSMutableDictionary dictionary];

// データを設定
[usrPlist setObject:@"あふぅ" forKey:@"miki"];
[usrPlist setObject:@"ちびき" forKey:@"hibiki"];
[usrPlist setObject:@"たかにゃ" forKey:@"takane"];

// プロパティリスト形式のデータに変換
NSString *errStr;
NSData *usrData = [NSPropertyListSerialization dataFromPropertyList:usrPlist format:NSPropertyListXMLFormat_v1_0 errorDescription:&errStr];

// データを保存
[usrData writeToFile:@"/Users/yayoi/Desktop/961.plist" atomically:YES];

出力されたプロパティリストはこうなります。

218


・dataFromPropertyList:format:errorDescription:

+ (NSData *)dataFromPropertyList:(id)plist format:(NSPropertyListFormat)format errorDescription:(NSString **)errorString

指定したプロパティリストを指定したフォーマットでNSDataオブジェクトにして返します

通常のCocoaのメモリ管理規則と異なり、errorStringで文字列を返す場合は、呼び出し元で解放する必要があります

重要)このメソッドは廃止される予定なので、代わりにdataWithPropertyList:format:options:error:メソッドを使用してください

と、あるのですがiPhone OS用のリファレンスにはdataWithPropertyList:メソッドがありません(Mac OS X用のNSPropertyListSerialization Class Referenceには有ります)

こっそりプレリリースのiPhone OS 4のリファレンスも見てみましたが、3.2と同じ内容でした

今後、両メソッドがどういう扱いになるのか現時点(2010.4.12)では分かりませんので、使用する際は注意してください

plist:プロパティリストを指定します
プロパティリストに含むオブジェクトはNSData、NSString、NSNumber、NSDate、NSArray、NSDictionaryで構成されている必要があります

format:プロパティリストのフォーマットを指定します
フォーマット形式は『Foundation(アーカイブ)』を参照してください

errorString:変換が成功した場合はnilを返します
変換に失敗した場合は、エラー内容を返します
文字列を受け取る場合は、解放する必要が有ります


・writeToFile:atomically:

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag

レシーバのバイト列を、指定したパスのファイルに書き込みます
成功した場合はYESを、失敗した場合はNOを返します

path:レシーバのバイト列を書き込むファイルパスを指定します
ファイルパスにチルダ『~』が含まれる場合は、stringByExpandingTildeInPathメソッドで変換してください

atomically:YESの場合、一度予備ファイルに書き出してから、本来指定したパスのファイルに書き換えます
そのため、書き出し途中にクラッシュしても元のパスのファイル内容は保証されます
NOの場合、直接指定したパスのファイルに書き出します



参考文献

NSUserDefaults Class Reference

NSPropertyListSerialization Class Reference

NSData Class Reference

iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)
(2009/09/08)
木下 誠

商品詳細を見る

詳解 Objective-C 2.0 第3版詳解 Objective-C 2.0 第3版
(2011/12/28)
荻原 剛志

商品詳細を見る






QuietControl 30 wireless headphones
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
04 | 2017/05 | 06
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

QuietControl 30 wireless headphones
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