2009-05-07 8 views
17

私はアプリケーションの状態を保存したいiPhoneアプリを作っています。これには、私が単独でファイルに保存しているintプロパティが含まれています。私はそれを書いて作業しているが、私はそれがちょっとハッキーで、intをStringに変換してからNSDataに変換する方法を知っている。誰かより良い方法を提案できますか?iPhone?

int i = 1; 
NSData *data = [NSData dataWithBytes: &i length: sizeof(i)]; 
[data writeToFile: [documentsDirectory stringByAppendingString: @"someFile"] atomically: YES] 

とリードバックする: -

int someInt = 1; 
NSString *aString = [NSString stringWithFormat:@"%d",someInt]; 
NSData *someData = [aString dataUsingEncoding:NSUTF8StringEncoding]; 
[someData writeToFile:[documentsDirectory stringByAppendingString:@"someFile"] atomically:YES]; 

そしてディスクからそれを読んで、int型に戻ってそれを置く

NSData* someData = [NSData dataWithContentsOfFile:[documentsDirectory stringByAppendingString:@"someFile"]]; 
NSString *aString = [[NSString alloc] initWithData:someData encoding:NSUTF8StringEncoding]; 
int someInt = [aString intValue]; 
+0

他の少なくとも1人は基本的に同意しています(http://lists.apple.com/archives/cocoa-dev/2002/Jun/msg01317.html)。彼らはNSNumberで始まりましたが、フォーマットステップをバイパスします。 –

答えて

57

は、書き込むには

NSData *data = [NSData dataWithContentsOfFile: [documentsDirectory stringByAppendingString: @"someFile"]]; 
int i; 
[data getBytes: &i length: sizeof(i)]; 

しかし、実際にはNSUserDefaultsを使用する必要があります

[[NSUserDefaults standardUserDefaults] setInteger: i forKey: @"someKey"] 

を書き、読むために

int i = [[NSUserDefaults standardUserDefaults] integerForKey: @"someKey"]; 

する:あなたがやっていると思います。その場合には、このようなグラム、。

+0

NSUserDefaultsは、環境設定アプリケーションで調整されたユーザー環境設定だけではありませんか? – bpapa

+0

いいえ。可能であれば、利用可能なユーザーインターフェイスがなくても、アプリの動作情報をそこに保存することも安全です(一般的です)。 OS XのSafariは、ユーザーのデフォルトを使用して、最終ウィンドウのサイズ、開発者機能が有効かどうかなどを保存します。 –