自定义对象:
.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);
}
分享到:
相关推荐
这个源码Demo主要展示了如何使用`NSUserDefaults`来读取和写入自定义对象,这对于理解和实践iOS应用的本地数据持久化非常有帮助。 首先,`NSUserDefaults` 是苹果提供的一个轻量级的存储方案,它主要用于存储用户的...
这个压缩包"IOS应用源码——NSUserdefaults(读取和写入自定义对象).zip"包含了一个示例项目,展示了如何使用`NSUserDefaults`来读取和写入自定义对象。下面我们将深入探讨这个主题。 首先,`NSUserDefaults` 是...
下面将详细阐述`NSUserDefaults`的工作原理、如何保存自定义对象以及如何从`NSUserDefaults`中读取这些对象。 首先,`NSUserDefaults` 是苹果提供的一种轻量级的数据持久化方式,它并不适合存储大量的数据,但非常...
对于自定义对象的存储,通常需要序列化(如JSON或Archiving)为基本数据类型,然后再存储。 8. **最佳实践** - 不要使用`NSUserDefaults`来存储敏感信息,如密码或信用卡信息,因为它并非加密存储。 - 对于需要跨...
NSUserDefaults-Swift 此示例将为您提供以下问题的所有答案, 如何在 Swift 中归档和取消归档... 如何在 Swift 中将自定义对象保存到 NSUserDefaults? 如何从 Swift 中的 NSUserDefaults 获取保存的自定义对象?
描述中提到了使用一种简单的方法来完成这个过程,并且能够方便地将转换后的对象保存到`NSUserDefaults`中,这表明这是一个轻量级的解决方案,适用于小型或中型项目。 首先,JSON(JavaScript Object Notation)是一...
NSUserDefaults+缓存 NSUserDefaults 类别 1 还包括内存缓存,因此我们每个项目只需要访问一次... 请注意,要保存自定义对象,您需要实现 NSCoding 协议,即 @interface CustomCodingObject : CustomObject @proper
这种方法适用于需要保存自定义对象的状态,且对象遵循了NSCoding协议。 2. **属性列表(Property List)**:属性列表是一种轻量级的数据存储方式,用于保存基本数据类型(如字符串、数字、日期、数组和字典)以及...
6. **存储自定义对象**: 默认情况下,`NSUserDefaults`只能存储基础类型和`NSData`。如果需要存储自定义对象,需要实现`NSCoding`协议,然后转换为`NSData`进行存储,取出时再反序列化回原对象。 在提供的"Contact...
偏好设置适合存储简单的键值对,而归档则适用于保存自定义对象,提供了更大的灵活性和扩展性。在开发过程中,开发者应根据实际需求选择合适的数据存储方式,确保数据的持久化和应用的正常运行。
2. **数据格式**:存储的对象需要是可序列化的,对于自定义对象,需遵循`NSCoding`协议。 3. **数据大小**:虽然方便,但不建议大量存储数据,因为它不是设计用来处理大数据的。 4. **数据一致性**:修改`...
11. **游戏保存与加载**:学习如何使用NSUserDefaults或自定义序列化方法保存游戏进度。 12. **性能优化**:了解内存管理和对象池(Pool)的概念,以提高游戏性能。 通过深入研究这个教程的源代码,新手开发者可以...
偏好设置适合少量简单数据,文件存储适用于非结构化数据,归档用于自定义对象,SQLite适用于大量结构化数据,而Core Data则在大型项目中用于复杂的模型管理。理解这些技术的优缺点以及适用场景,是成为优秀iOS开发者...
- 存档与加载:使用NSUserDefaults或自定义文件格式保存游戏进度。 - 音效管理:集成OpenAL播放音频,实现背景音乐和音效的无缝切换。 5. 性能调优: - 图形优化:合理使用精灵批处理、减少冗余渲染、避免过度的...
然而,`NSUserDefaults`默认不支持复杂对象如自定义类实例的存储。这就是运行时和归档技术发挥作用的地方。通过实现`NSCoding`协议,你可以将自定义类实例序列化为可以存储在`UserDefaults`中的数据格式。 ```swift...
- 使用:归档可以将自定义对象转换为NSData并保存到文件,解档则反向操作。例如,`[NSKeyedArchiver archiveRootObject:object toFile:path];`和`id object = [NSKeyedUnarchiver unarchiveObjectWithFile:path];` ...
我们需要记录每个文件的下载进度,例如通过NSUserDefaults或自定义数据库来存储。在恢复下载时,根据保存的进度创建一个新的URLSessionDownloadTask,设置适当的HTTP Range header来请求未下载的部分。 ...
对于更复杂的对象或更大的数据量,通常会使用自定义文件进行存储。这种方式可以更灵活地控制存储位置和文件格式。 ```objective-c // 存储对象 NSArray*> *persons = @[[[Person alloc] initWithName:@"李四" ...
Objective-C 中偏好设置的持久化是自动的,`NSUserDefaults` 在写入新值时会自动保存到磁盘。如果需要立即保存,可以调用 `[defaults synchronize]` 方法。 ### 5. JSON 支持 虽然 `NSUserDefaults` 主要用于存储...