在iOS中存储临时数据

时间:2013-07-29 05:27:22

标签: ios store

我想在iOS中存储全局数据,例如网络中的会话数据。除了sqlite之外,最好的方法是什么?

5 个答案:

答案 0 :(得分:1)

使用NSUserDefaults
NSUserDefaults非常适合保存分数,登录信息,程序状态等samm数据。您不需要数据库知识,易于学习和使用。

以下是文件:
 http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html

这是一个很好的教程:
http://www.icodeblog.com/2008/10/03/iphone-programming-tutorial-savingretrieving-data-using-nsuserdefaults/

修改: 虽然,根据您的评论,您似乎只想在ViewControllers之间传递数据。 单程:

假设您要将NSString myStringViewControllerA传递到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)

您可以将NSNumberNSStringNSArrayNSDictionary等基本类型直接写入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];

您还可以将NSDictionaryNSArrayNSData存储为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)

如果您要存储的数据有限,请随时使用NSUserDefaultsApple 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"];