如何保存核心数据以供以后使用



现在,在我的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等。它有几个部分,所以你可以逐步构建你的数据模式

祝好运

最新更新