`
iaiai
  • 浏览: 2196131 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

NSUserDefaults读取和写入自定义对象

 
阅读更多
NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名、密码之类的,个人觉得使用NSUserDefaults是首选。下次再登陆的时候就可以直接从NSUserDefaults里面读取上次登陆的信息咯。

因为如果使用自己建立的plist文件什么的,还得自己显示创建文件,读取文件,很麻烦,而是用NSUserDefaults则不用管这些东西,就像读字符串一样,直接读取就可以了。

NSUserDefaults支持的数据格式有:NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL类型。很实用吧

NSUserDefaults很方便,读取也很容易。下面给出一个示例看看如何使用:(PS:更详细的也可以参考官方文档哈)

ViewController.h文件中主要是放几个控件,用于显示存储的数据:
#import <UIKit/UIKit.h>  
  
@interface ViewController : UIViewController  
{  
      
    IBOutlet UILabel *txtInteger;  
    IBOutlet UILabel *txtFloat;  
    IBOutlet UILabel *txtDouble;  
    IBOutlet UILabel *txtNSString;  
    IBOutlet UILabel *txtNSDate;  
    IBOutlet UILabel *txtNSArray;  
    IBOutlet UILabel *txtNSDictionary;  
}  
  
@end

ViewController.m文件中最重要的是两个方法:
saveNSUserDefaults:用于将各种类型数据保存到NSUserDefaults中
readNSUserDefautls:用于从NSUserDefaults中读取各种类型的数据。在viewDidLoad中调用这两个方法就可以看出结果咯
#import "ViewController.h"  
  
@interface ViewController ()  
  
@end  
  
@implementation ViewController  
  
- (void)viewDidLoad  
{  
    [super viewDidLoad];  
  
    [self saveNSUserDefaults];  //调用此方法将各种数据存储到NSUserDefautls中,在下面定义  
    [self readNSUserDefaults];  //调用此方法从NSUserDefautls中读取各种数据,在下面定义  
}  
  
- (void)viewDidUnload  
{  
    [txtNSString release];  
    txtNSString = nil;  
    [txtNSDate release];  
    txtNSDate = nil;  
    [txtNSArray release];  
    txtNSArray = nil;  
    [txtNSDictionary release];  
    txtNSDictionary = nil;  
    [txtInteger release];  
    txtInteger = nil;  
    [txtFloat release];  
    txtFloat = nil;  
    [txtDouble release];  
    txtDouble = nil;  
    [super viewDidUnload];  
    // Release any retained subviews of the main view.  
}  
  
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  
{  
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);  
}  
  
- (void)dealloc {  
    [txtNSString release];  
    [txtNSDate release];  
    [txtNSArray release];  
    [txtNSDictionary release];  
    [txtInteger release];  
    [txtFloat release];  
    [txtDouble release];  
    [super dealloc];  
}  
  
//保存数据到NSUserDefaults  
-(void)saveNSUserDefaults  
{  
    NSString *myString = @"enuola";  
    int myInteger = 100;  
    float myFloat = 50.0f;  
    double myDouble = 20.0;  
    NSDate *myDate = [NSDate date];  
    NSArray *myArray = [NSArray arrayWithObjects:@"hello", @"world", nil];  
    NSDictionary *myDictionary = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"enuo", @"20", nil] forKeys:[NSArray arrayWithObjects:@"name", @"age", nil]];  
      
    //将上述数据全部存储到NSUserDefaults中  
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];  
    //存储时,除NSNumber类型使用对应的类型意外,其他的都是使用setObject:forKey:  
    [userDefaults setInteger:myInteger forKey:@"myInteger"];  
    [userDefaults setFloat:myFloat forKey:@"myFloat"];  
    [userDefaults setDouble:myDouble forKey:@"myDouble"];  
      
    [userDefaults setObject:myString forKey:@"myString"];  
    [userDefaults setObject:myDate forKey:@"myDate"];  
    [userDefaults setObject:myArray forKey:@"myArray"];  
    [userDefaults setObject:myDictionary forKey:@"myDictionary"];  
      
    //这里建议同步存储到磁盘中,但是不是必须的  
    [userDefaults synchronize];  
      
}  
  
//从NSUserDefaults中读取数据  
-(void)readNSUserDefaults  
{  
    NSUserDefaults *userDefaultes = [NSUserDefaults standardUserDefaults];  
      
    //读取数据到各个label中  
    //读取整型int类型的数据  
    NSInteger myInteger = [userDefaultes integerForKey:@"myInteger"];  
    txtInteger.text = [NSString stringWithFormat:@"%d",myInteger];  
      
    //读取浮点型float类型的数据  
    float myFloat = [userDefaultes floatForKey:@"myFloat"];  
    txtFloat.text = [NSString stringWithFormat:@"%f",myFloat];  
      
    //读取double类型的数据  
    double myDouble = [userDefaultes doubleForKey:@"myDouble"];  
    txtDouble.text = [NSString stringWithFormat:@"%f",myDouble];  
      
    //读取NSString类型的数据  
    NSString *myString = [userDefaultes stringForKey:@"myString"];  
    txtNSString.text = myString;  
      
    //读取NSDate日期类型的数据  
    NSDate *myDate = [userDefaultes valueForKey:@"myDate"];  
    NSDateFormatter *df = [[NSDateFormatter alloc] init];  
    [df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];  
    txtNSDate.text = [NSString stringWithFormat:@"%@",[df stringFromDate:myDate]];  
      
    //读取数组NSArray类型的数据  
    NSArray *myArray = [userDefaultes arrayForKey:@"myArray"];  
    NSString *myArrayString = [[NSString alloc] init];  
    for(NSString *str in myArray)  
    {  
        NSLog(@"str= %@",str);  
        myArrayString = [NSString stringWithFormat:@"%@  %@", myArrayString, str];  
        [myArrayString stringByAppendingString:str];  
//        [myArrayString stringByAppendingFormat:@"%@",str];  
        NSLog(@"myArrayString=%@",myArrayString);  
    }  
    txtNSArray.text = myArrayString;  
      
    //读取字典类型NSDictionary类型的数据  
    NSDictionary *myDictionary = [userDefaultes dictionaryForKey:@"myDictionary"];  
    NSString *myDicString = [NSString stringWithFormat:@"name:%@, age:%d",[myDictionary valueForKey:@"name"], [[myDictionary valueForKey:@"age"] integerValue]];  
    txtNSDictionary.text = myDicString;  
}  
  
@end

好了,运行一下,可以看到xib文件中的各种数据已经绑定上了吧?

再次运行的时候,可以把viewDidLoad中的  [self  saveNSUserDefaults];  这一行注释掉,让程序直接读取而不存储数据,发现以前保存的数据仍然可以读取到界面上。

嘻嘻,很简单吧,就这样就可以是实现数据的存储了。

下面讲一下原理:

你可能会问一个问题:NSUserDefautls将数据存储在什么地方了???我都没有显示的指定路径???很疑惑吧。。。。

用NSUserDefaults存储的数据下次程序运行的时候依然存在,它把数据存储在什么地方了?如何能够清除?

其实它存储在应用程序内置的一个plist文件里,这个可以根据路径看到。
比如说这个是你的程序沙盒位置
/UsersLibrary/Application Support/iPhoneSimulator/4.1/Applicati*****/29788E40-AF47-45A0-8E92-3AC0F501B7F4/,(这个是应用程序对应在mac上的位置)
这个下面有/Library/Prefereces,里面有个plist文件,存储的就是你的userDefaults
想要删掉的话,用removeObjectForKey或者删掉沙盒,也就是你的应用程序然后重新安装。
  • 大小: 55.9 KB
分享到:
评论

相关推荐

    NSUserdefaults读取和写入自定义对象.rar

    这个压缩包文件"NSUserdefaults读取和写入自定义对象.rar"显然关注的是如何利用`NSUserDefaults`来处理自定义对象的序列化与反序列化过程。以下是对这个主题的详细讲解: `NSUserDefaults`主要用于存储简单的数据...

    IOS 中NSUserDefaults读取和写入自定义对象的实现方法

    IOS 中NSUserDefaults读取和写入自定义对象的实现方法 NSUserDefaults是一种常用的存储小量数据的方式,但是它只能存储NSString, NSNumber, NSDate, NSArray, NSDictionary等几种数据类型。如果要存储自定义的对象...

    IOS源码应用Demo-NSUserdefaults(读取和写入自定义对象).zip

    这个源码Demo主要展示了如何使用`NSUserDefaults`来读取和写入自定义对象,这对于理解和实践iOS应用的本地数据持久化非常有帮助。 首先,`NSUserDefaults` 是苹果提供的一个轻量级的存储方案,它主要用于存储用户的...

    IOS应用源码——NSUserdefaults(读取和写入自定义对象).zip

    这个压缩包"IOS应用源码——NSUserdefaults(读取和写入自定义对象).zip"包含了一个示例项目,展示了如何使用`NSUserDefaults`来读取和写入自定义对象。下面我们将深入探讨这个主题。 首先,`NSUserDefaults` 是...

    IOS应用源码——NSUserdefaults(读取和写入自定义对象).rar

    本源码示例主要讲解如何利用`NSUserDefaults`在iOS应用中进行自定义对象的读取与写入操作。下面将详细阐述`NSUserDefaults`的工作原理、如何保存自定义对象以及如何从`NSUserDefaults`中读取这些对象。 首先,`...

    数据持久化

    使用NSArray或NSDictionary对象,配合写入和读取方法,可以方便地实现数据持久化。 3. **NSUserDefaults**:NSUserDefaults是系统提供的一个单例,用于存储用户偏好设置和轻量级的数据。它非常适合保存小量的简单...

    objective-c 的偏好设置

    读取和写入用户偏好设置的代码示例如下: ```objc // 写入偏好设置 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:@"张三" forKey:@"username"]; [defaults synchronize...

    详解iOS开发中app的归档以及偏好设置的存储方式

    以下是一个关于如何使用归档的完整示例,涉及自定义对象YYPerson的编码和解码: ```objc // YYViewController.m - (IBAction)saveBtnOnclick:(id)sender { YYPerson *p = [[YYPerson alloc] init]; p.name = @"文...

    ios 数据持久化存储

    Core Data是苹果的高级数据管理框架,它不仅包括数据库功能,还提供了模型层管理和对象关系映射(ORM)。Core Data支持实体、属性、关系的概念,可以方便地进行数据模型设计。使用Core Data可以更高效地处理数据,...

    NSUerDefaults传值的简单实现

    `NSUserDefaults`的数据会自动同步到磁盘,但如果你想立即写入,可以调用`synchronize()`方法: ```swift standardUserDefaults.synchronize() ``` ### 三、支持的数据类型 `NSUserDefaults`支持多种基本数据...

    iphone全局变量配置

    例如,你可以这样读取和写入数据: ```objc NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:@"configValue" forKey:@"configKey"]; NSString *value = [defaults ...

    iOS中几种数据持久化方案.pdf

    适用于自定义对象的持久化,但需要遵循NSCoding协议。归档和解档方法分别是`archiveRootObject:toFile:`和`unarchiveObject(withFile:)`。 4. SQLite 3: SQLite是一个轻量级的关系型数据库,可在iOS中用于存储...

    iOS中几种数据持久化方案 --X枫林1

    - 使用:归档可以将自定义对象转换为NSData并保存到文件,解档则反向操作。例如,`[NSKeyedArchiver archiveRootObject:object toFile:path];`和`id object = [NSKeyedUnarchiver unarchiveObjectWithFile:path];` ...

    Objective.C.For.iPhone.Developers.A.Beginners.Guide.pdf

    - **文件系统操作**: 可以通过 `NSFileManager` 来读取、写入和管理文件。 **网络通信** - **NSURLSession**: 用于发起 HTTP 请求并处理响应。 - **JSON 解析**: 使用 `NSJSONSerialization` 或第三方库如 `...

    Archiver归档的使用

    - **`encodeWithCoder:`**:此方法用于将对象的状态编码到归档中,通常会遍历对象的所有属性并将它们写入归档。 - **`initWithCoder:`**:此方法用于从归档中解码对象的状态并恢复其原始形式。 例如,如果有一个名...

    ios-UserDefault.zip

    通过查看这个文件,开发者可以更深入地了解如何在实际项目中利用 `UserDefaults` 进行数据持久化,例如如何创建和管理自定义的键值对,以及如何处理不同类型的对象。 总的来说,`UserDefaults` 是 iOS 开发中一个...

    Object-C构建一个简单的待办事项(Todo)应.rar

    在`TodoViewController`中,添加方法来读取和写入`TodoItem`实例到存储。 6. **功能实现** 实现添加新事项的功能。当用户点击“添加”按钮时,从文本字段获取输入,创建新的`TodoItem`实例,并将其添加到数组中,...

Global site tag (gtag.js) - Google Analytics