我想在iOS中存储全局数据,例如网络中的会话数据。除了sqlite之外,最好的方法是什么?
答案 0 :(得分:1)
使用NSUserDefaults
。
NSUserDefaults非常适合保存分数,登录信息,程序状态等samm数据。您不需要数据库知识,易于学习和使用。
修改强>: 虽然,根据您的评论,您似乎只想在ViewControllers之间传递数据。 单程:
假设您要将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;
答案 1 :(得分:1)
您可以将NSNumber
,NSString
,NSArray
,NSDictionary
等基本类型直接写入NSUserDefaults
。这些将在应用会话之间自动保存/加载。
NSString* myData = @"someValue";
[[NSUserDefaults standardUserDefaults] setObject:myData forKey:@"myData"];
对于更复杂的数据类型,您可以利用NSCoder和NSCoding协议轻松地使您的类可序列化。
这里的答案中的代码可能会有所帮助。 Save own Class with NSCoder
答案 2 :(得分:1)
您可以使用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
中的对象。有关详细信息,请查看this教程。
另一种传递数据的方法在viewController之间是这样的。
假设我们有两个ViewController
-FirstViewController
-SecondViewController
现在,如果我想从First到第二个ViewController传递一个字符串,那么在secondViewcontroller中创建该字符串的属性
#import <UIKit/UIKit.h>
@interface SecondViewcontroller : UIViewController
@property (strong, nonatomic) NSString *strFromFirst;
@end
在.m文件中合成它。之后在firstViewController中推送视图控制器时将字符串发送到第二个Viewcontroller
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。
答案 3 :(得分:1)
你需要使用NSUSERDefault,它非常容易处理。
你可以像这样在NSUserDefault中保存NSString,NSDictionaray,NSnumber ..
//存储数组值
NSMutableArray *array = [NSMutableArray array];
[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"array"];
// Stroe String to nsuserDefault
NSString *str=@"ABC";
[[NSUserDefaults standardUserDefaults] setObject:str forKey:@"value"];
答案 4 :(得分:0)
如果您要存储的数据有限,请随时使用NSUserDefaults
。
Apple Reference for NSUserDefaults
例如,您需要将一些字符串(比如名称)存储到用户默认值中。
NSString *name = "Your Name";
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:name forKey:@"name"];
[defaults synchronize];
重要的是,完成使用setObject for key后,您必须调用synchronize
方法,以便将这些更改存储在用户默认值中
用于访问相同的firstName字符串
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[defaults objectForKey:@"name"];