`
zani
  • 浏览: 356467 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

使用NSUserDefaults保存自定义对象

 
阅读更多

自定义对象:

.h文件

#import <Foundation/Foundation.h>

@interface MyObject : NSObject
{
    NSNumber* lowValue;
    NSNumber* highValue;
    
    NSString* titleString;
}
@property(nonatomic, retain)NSNumber* lowValue;
@property(nonatomic, retain)NSNumber* highValue;

@property(nonatomic, retain)NSString* titleString;
@end

 

.m文件:

#import "MyObject.h"

@implementation MyObject
@synthesize lowValue, highValue, titleString;
- (void)encodeWithCoder:(NSCoder *)encoder 
{
    [encoder encodeObject:self.lowValue forKey:@"lowValue"];
    [encoder encodeObject:self.highValue forKey:@"highValue"];
    [encoder encodeObject:self.titleString forKey:@"titleString"];
}
- (id)initWithCoder:(NSCoder *)decoder 
{
    if(self = [super init])
    {
        self.lowValue = [decoder decodeObjectForKey:@"lowValue"];
        self.highValue = [decoder decodeObjectForKey:@"highValue"];
        self.titleString = [decoder decodeObjectForKey:@"titleString"];
    }
    return  self;
}

@end

 

 

保存单个MyObject方法:

- (void)saveCustomObject:(MyObject *)obj 
{
    NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:obj];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:myEncodedObject forKey:@"myEncodedObjectKey"];
}
- (MyObject *)loadCustomObjectWithKey:(NSString *)key 
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSData *myEncodedObject = [defaults objectForKey:key];
    MyObject *obj = (MyObject *)[NSKeyedUnarchiver unarchiveObjectWithData: myEncodedObject];
    return obj;
}

保存:
        MyObject* testObj = [[MyObject alloc] init];
        testObj.lowValue  =[NSNumber  numberWithFloat:122.2 ];
        testObj.highValue = [NSNumber numberWithFloat:19888 ];
        testObj.titleString = @“baoyu”;

读取:
    MyObject* obj = [self loadCustomObjectWithKey:@"myEncodedObjectKey"];
    NSLog(@"%f, %f, %@", [obj.lowValue floatValue], [obj.highValue floatValue], obj.titleString);

 

 

保存多个MyObject方法:

保存:
    NSMutableArray* array = [[NSMutableArray alloc] init];
    for(int i=0; i<3; i++)
    {
        MyObject* testObj = [[MyObject alloc] init];
        testObj.lowValue  =[NSNumber  numberWithFloat:122.2+i ];
        testObj.highValue = [NSNumber numberWithFloat:19888+i ];
        testObj.titleString = [NSString stringWithFormat:@"BAOYU%d", i];
        
        [array addObject:testObj];

    }
 [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:array] forKey:@"myarray"];


读取:
		NSData* data  = [[NSUserDefaults standardUserDefaults] objectForKey:@"myarray"];
    

    NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    for(MyObject* obj in oldSavedArray)
    {
        NSLog(@"%f, %f, %@", [obj.lowValue floatValue], [obj.highValue floatValue], obj.titleString);
    }
 
分享到:
评论

相关推荐

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

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

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

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

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

    下面将详细阐述`NSUserDefaults`的工作原理、如何保存自定义对象以及如何从`NSUserDefaults`中读取这些对象。 首先,`NSUserDefaults` 是苹果提供的一种轻量级的数据持久化方式,它并不适合存储大量的数据,但非常...

    iphone 开发学习基础NSUserDefaults

    对于自定义对象的存储,通常需要序列化(如JSON或Archiving)为基本数据类型,然后再存储。 8. **最佳实践** - 不要使用`NSUserDefaults`来存储敏感信息,如密码或信用卡信息,因为它并非加密存储。 - 对于需要跨...

    NSUserDefaults-Swift

    NSUserDefaults-Swift 此示例将为您提供以下问题的所有答案, 如何在 Swift 中归档和取消归档... 如何在 Swift 中将自定义对象保存到 NSUserDefaults? 如何从 Swift 中的 NSUserDefaults 获取保存的自定义对象?

    实现将JSON数据转换成自定义的类对象

    描述中提到了使用一种简单的方法来完成这个过程,并且能够方便地将转换后的对象保存到`NSUserDefaults`中,这表明这是一个轻量级的解决方案,适用于小型或中型项目。 首先,JSON(JavaScript Object Notation)是一...

    NSUserDefaults-Cache:NSUserDefaults 类别 1 还包括内存缓存,因此我们每个项目只需要访问一次磁盘

    NSUserDefaults+缓存 NSUserDefaults 类别 1 还包括内存缓存,因此我们每个项目只需要访问一次... 请注意,要保存自定义对象,您需要实现 NSCoding 协议,即 @interface CustomCodingObject : CustomObject @proper

    数据持久化

    这种方法适用于需要保存自定义对象的状态,且对象遵循了NSCoding协议。 2. **属性列表(Property List)**:属性列表是一种轻量级的数据存储方式,用于保存基本数据类型(如字符串、数字、日期、数组和字典)以及...

    NSUserDefault存储数据

    6. **存储自定义对象**: 默认情况下,`NSUserDefaults`只能存储基础类型和`NSData`。如果需要存储自定义对象,需要实现`NSCoding`协议,然后转换为`NSData`进行存储,取出时再反序列化回原对象。 在提供的"Contact...

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

    偏好设置适合存储简单的键值对,而归档则适用于保存自定义对象,提供了更大的灵活性和扩展性。在开发过程中,开发者应根据实际需求选择合适的数据存储方式,确保数据的持久化和应用的正常运行。

    NSUerDefaults传值的简单实现

    2. **数据格式**:存储的对象需要是可序列化的,对于自定义对象,需遵循`NSCoding`协议。 3. **数据大小**:虽然方便,但不建议大量存储数据,因为它不是设计用来处理大数据的。 4. **数据一致性**:修改`...

    知易Cocos2D-iPhone开发教程源代码

    11. **游戏保存与加载**:学习如何使用NSUserDefaults或自定义序列化方法保存游戏进度。 12. **性能优化**:了解内存管理和对象池(Pool)的概念,以提高游戏性能。 通过深入研究这个教程的源代码,新手开发者可以...

    ios 数据持久化存储

    偏好设置适合少量简单数据,文件存储适用于非结构化数据,归档用于自定义对象,SQLite适用于大量结构化数据,而Core Data则在大型项目中用于复杂的模型管理。理解这些技术的优缺点以及适用场景,是成为优秀iOS开发者...

    toyworld3 cocos2d

    - 存档与加载:使用NSUserDefaults或自定义文件格式保存游戏进度。 - 音效管理:集成OpenAL播放音频,实现背景音乐和音效的无缝切换。 5. 性能调优: - 图形优化:合理使用精灵批处理、减少冗余渲染、避免过度的...

    swift-利用NSUserDefaultsruntime和归档快速存储用户信息简单粗暴集成简单.

    然而,`NSUserDefaults`默认不支持复杂对象如自定义类实例的存储。这就是运行时和归档技术发挥作用的地方。通过实现`NSCoding`协议,你可以将自定义类实例序列化为可以存储在`UserDefaults`中的数据格式。 ```swift...

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

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

    swift-基于URLSession封装的网络请求框架

    我们需要记录每个文件的下载进度,例如通过NSUserDefaults或自定义数据库来存储。在恢复下载时,根据保存的进度创建一个新的URLSessionDownloadTask,设置适当的HTTP Range header来请求未下载的部分。 ...

    Archiver归档的使用

    对于更复杂的对象或更大的数据量,通常会使用自定义文件进行存储。这种方式可以更灵活地控制存储位置和文件格式。 ```objective-c // 存储对象 NSArray*&gt; *persons = @[[[Person alloc] initWithName:@"李四" ...

    objective-c 的偏好设置

    Objective-C 中偏好设置的持久化是自动的,`NSUserDefaults` 在写入新值时会自动保存到磁盘。如果需要立即保存,可以调用 `[defaults synchronize]` 方法。 ### 5. JSON 支持 虽然 `NSUserDefaults` 主要用于存储...

Global site tag (gtag.js) - Google Analytics