`
sgm881218
  • 浏览: 58450 次
社区版块
存档分类
最新评论

NSUserDefaults读取和写入自定义对象

    博客分类:
  • ios
 
阅读更多

定义:

1. NSUserDefaults类用于保存应用程序设置和属性以及用户数据。例如,你可以存储用户在应用程序中使用的图片或默认颜色方案,或者背景等。这些对象存储在iOS所谓的“defaults系统”中。

2. iOS的defaults系统在整个app中都是可用的,因此存放到defaults系统中的数据也是整个应用程序生命周期中可用的。也就是说,无论用户关闭程序还是关机,在用户再次打开程序或开机后这些数据仍然存在。

3. 从NSUserDefaults返回的值是不可改变的,即便是你在存储的时候使用的是可变的值。例如你使用mutable string做为“MyStringDefault”的值,当你做使用stringForKey:方法获取的值,这个值仍然是不可变的。 

4. NSUserDefaults是单例,同时也是线程安全的 

5. NSUserDefaults可以存储的数据类型只能是property list类型的数据。(NSData,NSString,NSNumber,NSDate,NSArray,NSDictionary)

如果你想保存其他类型,如UIImage,你应该进行编码(即archive),或者将它转换为NSData、NSNumber或者NSString。

1.

NSString *string = [NSString stringWithString @"hahaha"];  
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];  
[ud setObject:string forKey:@"myKey"];  
NSString *value;  
value = [ud objectForKey:"myKey"];  

 2.

如果把一个自定义的类存到一个NSArray里,然后再存到NSUserDefaults里也是不能成功的。可以让这个自定义类实现<NSCoding>协议中的- (id) initWithCoder: (NSCoder *)coder方法和- (void) encodeWithCoder: (NSCoder *)coder方法,然后把该自定义的类对象编码到NSData中,再从NSUserDefaults中进行读取。

@interface BusinessCard : NSObject <NSCoding>{  
    NSString *_firstName;  
    NSString *_lastName;  
}  
@property (nonatomic, retain) NSString *_firstName;  
@property (nonatomic, retain) NSString *_lastName;  
@end;  
  
@implementation BusinessCard  
@synthesize _firstName, _lastName;  
- (void)dealloc{  
    [_firstName release];  
    [_lastName release];  
    [super dealloc];  
}  
- (id) initWithCoder: (NSCoder *)coder  
{  
    if (self = [super init])  
    {  
        self._firstName = [coder decodeObjectForKey:@"_firstName"];  
        self._lastName = [coder decodeObjectForKey:@"_lastName"];  
    }  
    return self;  
}  
- (void) encodeWithCoder: (NSCoder *)coder  
{  
    [coder encodeObject:_firstName forKey:@"_firstName"];  
    [coder encodeObject:_lastName forKey:@"_lastName"];  
      
}  
  
@end  

 然后再存取时通过NSData做载体:

BusinessCard *bc = [[BusinessCard alloc] init];  
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];  
NSData *udObject = [NSKeyedArchiver archivedDataWithRootObject:bc];  
[ud setObject:udObject forKey:@"myBusinessCard"];  
[bc release];  
udObject = nil;  
udObject = [ud objectForKey:@"myBusinessCard"];  
bc = [NSKeyedUnarchiver unarchiveObjectWithData:udObject] ;  

 

0
0
分享到:
评论

相关推荐

    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