0

我想将数据存储在 iOS 中以供全球使用,例如 Web 中的会话数据。除了 sqlite 之外,最好的方法是什么?

4

5 回答 5

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。有关更多信息,请查看教程。

在 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。

于 2013-07-29T05:32:24.473 回答
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 myStringViewControllerAto传递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;
于 2013-07-29T05:29:05.470 回答
1

您可以将基本类型(如NSNumber, NSString, NSArray,NSDictionary等)直接写入NSUserDefaults. 这些将在应用会话之间自动保存/加载。

NSString* myData = @"someValue";
[[NSUserDefaults standardUserDefaults] setObject:myData forKey:@"myData"];

对于更复杂的数据类型,您可以利用 NSCoder 和 NSCoding 协议轻松地使您的类可序列化。

此处答案中的代码可能会有所帮助。 使用 NSCoder 保存自己的类

于 2013-07-29T05:29:20.937 回答
1

您需要使用 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"];
于 2013-07-29T05:34:04.803 回答
0

如果您要存储的数据有限,请随意使用NSUserDefaultsNSUserDefaults 的 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"];
于 2013-07-29T05:31:49.973 回答