我想将数据存储在 iOS 中以供全球使用,例如 Web 中的会话数据。除了 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 之间传递数据的另一种方式是这样的。
假设我们有两个 ViewController
-FirstViewController
-SecondViewController
现在,如果我想将字符串从 First 传递到第二个 ViewController thanfirst 在 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。
使用NSUserDefaults
.
NSUserDefaults 非常适合保存 samm 数据,例如分数、登录信息、程序状态。您不需要数据库知识,而且它易于学习和使用。
这是一个很好的教程: http:
//www.icodeblog.com/2008/10/03/iphone-programming-tutorial-savingretrieving-data-using-nsuserdefaults/
编辑:虽然,根据您的评论,您似乎只想在 ViewControllers 之间传递数据。 单程 :
假设您想NSString
myString
从ViewControllerA
to传递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 协议轻松地使您的类可序列化。
此处答案中的代码可能会有所帮助。 使用 NSCoder 保存自己的类
您需要使用 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 的 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"];