0

现在在我的 iPhone 应用程序上,我正在将大量数据从一个NSData对象保存到NSUserDefaults. 我知道这不是最好的方法,因为NSUserDefaults它仅用于存储小块数据。

我正在这样做:

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

用于延迟检索此数据。

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

4

2 回答 2

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]]加载。

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

于 2012-07-11T14:29:29.563 回答
1

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

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

祝你好运

于 2012-07-11T14:28:04.397 回答