Web のセッション データのように、グローバルに iOS にデータを保存したいと考えています。sqlite 以外の最良のアプローチは何ですか?
5 に答える
そのために使えますNSUserDefaults
。
データを保存するには、このコードを使用できます
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"Dilip" forKey:@"firstName"];
[defaults setObject:@"Manek" forKey:@"lastname"];
[defaults setInteger:24 forKey:@"age"];
[defaults synchronize];
データを取得するには、このコードを使用します
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *firstName = [defaults objectForKey:@"firstName"];
NSString *lastName = [defaults objectForKey:@"lastname"];
int age = [defaults integerForKey:@"age"];
NSString *ageString = [NSString stringWithFormat:@"%i",age];
NSDictionary
、NSArray
、またはNSData
をオブジェクトとしてに保存することもできます。詳細については、このチュートリアルNSUserDefault
をご覧ください。
viewController間でデータを渡す別の方法はこんな感じです。
2 つの ViewController があるとします。
-FirstViewController
-SecondViewController
First から Second ViewController に文字列を渡したい場合は、first create Property of its string in secondViewcontroller
#import <UIKit/UIKit.h>
@interface SecondViewcontroller : UIViewController
@property (strong, nonatomic) NSString *strFromFirst;
@end
.m ファイルに合成します。その後、最初のViewControllerでビューコントローラーをプッシュすると、文字列が2番目のビューコントローラーに送信されます
SecondViewcontroller * vc = [[SecondViewcontroller alloc] initWithNibName:@"SecondViewcontroller" bundle:nil];
// Pass the selected object to the SecondViewcontroller.
fraudluntReportViewController.strFromFirst = @"Dilip";
[self.navigationController pushViewController:vc animated:YES];
これにより、文字列が FirstViewController から SecondViewController に送信されます。
非常に扱いやすい NSUSERDefault を使用する必要があります。
このように NSUserDefault に NSString、NSDictionaray、NSnumber を保存できます。
// 配列値を格納
NSMutableArray *array = [NSMutableArray array];
[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"array"];
// 文字列を nsuserDefault に格納
NSString *str=@"ABC";
[[NSUserDefaults standardUserDefaults] setObject:str forKey:@"value"];
を使用しNSUserDefaults
ます。
NSUserDefaults は、スコア、ログイン情報、プログラム状態などの samm データを保存するのに最適です。データベースの知識は必要なく、簡単に習得して使用できます。
ドキュメントは次のとおりです。
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html
優れたチュートリアルは次のとおりです
。
編集:ただし、コメントに基づいて、ViewController間でデータを渡したいだけのようです。 一方通行 :
NSString
myString
からに渡したいとしましょViewControllerA
うViewControllerB
。次に、 でこのようなプロパティを作成しますViewControllerB
。
@property (strong, nonatomic) NSString *passedString;// strong if you are using RC, ow retain
ではViewControllerA.m
、割り当て、開始ViewControllerB
時に、
ViewControllerB *viewControllerB = [[ViewControllerB alloc]init];
viewControllerB.passedString = myString;
別の方法: (よりグローバル変数型の方法)
でプロパティを宣言できますAppDelegate.h
@property (strong, nonatomic) NSString *passedString;
ViewControllerB では、AppDelgate オブジェクトを作成してプロパティにアクセスできます。
AppDelegate *app = [[UIApplication sharedApplication]delegate];
NSString *passedString = app.passedString;
、、、、などNSNumber
の基本型を に直接書き込むことができます。これらは、アプリ セッション間で自動的に保存/ロードされます。NSString
NSArray
NSDictionary
NSUserDefaults
NSString* myData = @"someValue";
[[NSUserDefaults standardUserDefaults] setObject:myData forKey:@"myData"];
より複雑なデータ型の場合、NSCoder と NSCoding プロトコルを利用して、クラスを簡単にシリアライズ可能にすることができます。
The code in the answer here may be helpful. Save own Class with NSCoder
保存するデータが限られている場合は、自由に使用してNSUserDefaults
ください。
NSUserDefaults の Apple リファレンス
たとえば、ユーザーのデフォルトに文字列(名前など)を保存する必要があります。
NSString *name = "Your Name";
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:name forKey:@"name"];
[defaults synchronize];
ここで重要なのは、キーの setObject を使用したら、synchronize
メソッドを呼び出して、これらの変更がユーザーのデフォルトに保存されるようにする必要があることです。
同じ firstName 文字列にアクセスするため
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[defaults objectForKey:@"name"];