下面是一个使用ns归档读写数据的类。
Data.m
-(id)init {
self = [super init];
if(self) {
arr = [[NSMutableArray alloc] init];
}
return self;
}
-(NSString *)getPath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath;
if ([paths count] > 0)
documentPath = [paths objectAtIndex:0];
NSString *draftDataPath = [documentPath stringByAppendingPathComponent:@"draftData.dat"];
return draftDataPath;
}
-(void)saveDataToDisk {
NSString *path = [self getPath];
[NSKeyedArchiver archiveRootObject:arr toFile:path];
}
-(void)loadDataFromDisk {
NSString *path = [self getPath];
self.arr = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
}稍后,我将通过执行CustomerClass.m将一些对象添加到arr中
- (void) viewDidLoad {
Data *data = [[Data alloc] init];
[data.arr addObject:myObject1]
[data.arr addObject:myObject2]
[data.arr addObject:myObject3]
[data saveDataToDisk];
}在DisplayData.m,我想通过
- (void) viewDidLoad {
Data *data = [[Data alloc] init];
[data loadDataFromDisk];
NSLog(@"length of array is %d",[data.arr count]);
}在控制台上,我得到了
length of array is 1我觉得应该是3块。
如果你有任何线索的话,请指出我在工作中犯了什么错误。
发布于 2012-07-24 17:56:28
因此,我怀疑您的"myObjects“与NSCoding不兼容。我刚做了这个:
NSMutableArray *arr = [NSMutableArray arrayWithCapacity:3];
[arr addObject:@"Hello"];
[arr addObject:@" "];
[arr addObject:@"World"];
BOOL ret = [NSKeyedArchiver archiveRootObject:arr toFile:[self getPath]];
NSArray *arr2 = [NSKeyedUnarchiver unarchiveObjectWithFile:[self getPath]];
NSLog(@"count = %d", [arr2 count]);结果是“计数= 3”
发布于 2012-07-24 17:31:01
我觉得这里有太多的代码来做你想要的。我想你所需要的就是:
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:dataClass] forKey:NSUserDefaultString];
[[NSUserDefaults standardUserDefaults] synchronize];去拯救它。
和:
NSData *someData = [[NSUserDefaults standardUserDefaults] objectForKey:NSUserDefaultString];
if (settingsData != nil)
{
dataClass = [NSKeyedUnarchiver unarchiveObjectWithData:settingsData];
}去取回它。
https://stackoverflow.com/questions/11635948
复制相似问题