现在,在我的iPhone应用程序上,我正在将大块数据从NSData
对象保存到NSUserDefaults
。我知道这不是最好的方法,因为NSUserDefaults
只用于存储少量数据。
我这样做:
NSData *data = [NSData alloc]init]];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"MyData"];
用于此数据的后期检索。
永久保存此data
以备将来使用的正确方法是什么?
使用您想要的属性(.h文件)创建一个自定义类:
#import <Foundation/Foundation.h>
@interface CustomHolder : NSObject {
NData *data;
}
@property (strong, nonatomic) NSData *data;
@end
然后设置.m文件,以便对对象进行编码/解码
#import "CustomHolder.h"
@implementation CustomHolder
@synthesize data;
- (void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:data forKey:@"data"];
}
- (id)initWithCoder:(NSCoder *)decoder
{
if (self = [super init])
{
self.data = [decoder decodeObjectForKey:@"data"];
}
return self;
}
@end
然后您可以只保存[NSKeyedArchiver archiveRootObject:obj toFile:[self saveFilePath]]
和加载[NSKeyedUnarchiver unarchiveObjectWithFile:[self saveFilePath]]
。
这适用于任何类型的数据,并为您提供了向对象添加所需数量的不同数据文件的选项。
NSUserDefaults适用于少量数据,而不是复杂的数据结构除非你有一个存储数据的外部服务器,否则没有真正的"永久"保存数据的方法,但只要应用程序不被删除,核心数据是一种很好的存储方法。
Ray Wenderlich的本教程是一个很好的起点。带您了解NSManagedObject概念、fetchRequest等。它有几个部分,所以你可以逐步构建你的数据模式
祝好运