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

时间:2012-07-11 14:21:20

标签: iphone objective-c cocoa-touch nsdata

目前,在我的iPhone应用程序中,我正在将{strong>大块数据从NSData对象保存到NSUserDefaults。我知道这不是最好的方法,因为NSUserDefaults仅用于存储小块数据。

我这样做是这样的:

NSData *data = [NSData alloc]init]];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"MyData"];

用于延迟检索此数据。

将此data永久保存以供进一步使用的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

创建一个包含所需属性的自定义类(.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]]加载。

这适用于任何类型的数据,并允许您根据需要向对象添加任意数量的不同数据文件。

答案 1 :(得分:1)

NSUserDefaults对于少量数据非常方便,而不是复杂的数据结构 除非您有一个存储数据的外部服务器,否则没有真正的“永久”方式来保存数据,但只要应用程序没有被删除,Core Data就是一种很好的存储方式。

Ray Wenderlich的tutorial是一个很好的起点。带您了解NSManagedObject概念,fetchRequests等。 它有几个部分,因此您可以逐步构建数据模式

祝你好运