*filepath = [homeDirectory stringByAppendingPathComponent:@"temparray.adsf"]; NSArray *unArray = [NSKeyedUnarchiver stringByAppendingPathComponent:@"data.archive"]; 解归档 //解归档 NSData *data = [NSData dataWithContentsOfFile:directoryA]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; float weight = [unarchiver
想要把它存储在本地plist文件中,需要用到 NSKeyedArchiver 和 NSKeyedUnarchiver 但是在此之前,你需要把你的类改造一下。 ? 起初的类 ? 而一旦 encode 方法被实现,NSKeyedArchiver 和 NSKeyedUnarchiver 马上就被“解锁”并可以替代 writeToFile 方法啦! ?
子类: NSKeyedUnarchiver (反序列化) 把对象写到二进制流中去。 ) lastObject]; NSString *filePath = [path stringByAppendingString:@"/holderModel"]; _holderModel = [NSKeyedUnarchiver NSUserDefaults standardUserDefaults] objectForKey:kTicPods2StandardPreferenceModel]; _standardPreferenceModel = [NSKeyedUnarchiver
与之相对的有一个类叫 NSKeyedUnarchiver ,顾名思义就是反归档了,也可以叫解档,可以将之前归档的数据恢复成原始数据。 Cloudox" toFile:demoPath];// 归档一个字符串 if (flag) NSLog(@"归档成功"); NSLog(@"解档后为:%@", [NSKeyedUnarchiver 存储解档后多个对象的容器 NSMutableData *unMultiData = [[NSMutableData alloc] initWithContentsOfFile:multiPath]; NSKeyedUnarchiver *multiUnarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:unMultiData]; NSString *unName
我们还可以用NSKeyedArchiver方式来进行归档,用NSKeyedUnarchiver相应的方式进行反归档。 stringByAppendingPathComponent:@"ArchiverArray.archiver"]; [NSKeyedArchiver archiveRootObject:dataArray toFile:arrayName];// NSKeyedUnarchiver newDictionary=[NSKeyedUnarchiverunarchiveObjectWithFile:dictionaryName]; NSMutableArray *newArray=[NSKeyedUnarchiver
-> NSDictionary NSData *data = [[NSMutableData alloc]initWithContentsOfFile:[self dataFilePath]]; NSKeyedUnarchiver *unarchiver =[[NSKeyedUnarchiver alloc] initForReadingWithData:data]; NSDictionary *myDictionary = 5",nil]; NSData *data= [NSKeyedArchiver archivedDataWithRootObject:arr1]; NSArray *arr2= [NSKeyedUnarchiver
其存储与读取的过程,主要封装在两个类中:NSKeyedArchiver和NSKeyedUnarchiver。 homePath]; //方式一和方式二的效果完全一样 只是解归档的时候不同 //方式一的解归档:先获取data数据,在进行data数据的解归档 NSLog(@"%@",[NSKeyedUnarchiver unarchiveObjectWithData:data]); //方式二的解归档:直接解文件中的归档 NSLog(@"%@",[NSKeyedUnarchiver unarchiveObjectWithFile * unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data]; //进行反序列化 NSString * name NSData * data = [NSKeyedArchiver archivedDataWithRootObject:obj]; //进行解档 MyObject * obj2 = [NSKeyedUnarchiver
Person alloc] init]; [NSKeyedArchiver archiveRootObject:person toFile:path]; (3)解档一个对象 Person *person = [NSKeyedUnarchiver atomically:YES]; (2) 解档步骤 // 从文件中读取数据 NSData *data = [NSData dataWithContentsOfFile:path]; // 根据数据,解析成一个NSKeyedUnarchiver 对象 NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; Person *person1
3)、使用NSKeyedArchiver对自定义对象进行归档, 使用NSKeyedUnarchiver解析归档对象 首先自定义类需要实现NSCoding协议,然后实现方法 - (void ; } } /* 使用NSKeyedUnarchiver解析归档对象 */ - (IBAction)readyDataByArchiver:(id)sender{ NSString * , YES) lastObject] stringByAppendingPathComponent:@"tanPerson.data"]; TanPerson *person = [NSKeyedUnarchiver 将数据读取到data上 NSMutableData *data = [NSMutableData dataWithContentsOfFile:path]; //解析数据 NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; TanPerson *person1 = [unArchiver
UTF16的字符),而用- (nullable const char *)cStringUsingEncoding:(NSStringEncoding)encoding;可以转换成char*字符串; 2、NSKeyedUnarchiver 偶现NSException NSKeyedUnarchiver有时候在解压的时候会出现下面的异常: NSException-[NSKeyedUnarchiver initForReadingWithData
当然,也可以选择Binary Data: 保存前,调用NSKeyedUnarchiver的archivedDataWithRootObject:方法返回NSData类型数据,让Core Data可以对其进行保存 ; 取回时,用NSKeyedUnarchiver的unarchiveObjectWithData:方法,将取回的NSData数据,转换回数组、字典对象。 reverseTransformedValue:(id)value { NSData *data = (NSData *)value; // 将NSData对象转换为自定义对象 HAEq *eq = [NSKeyedUnarchiver
NSData *data = [NSData dataWithContentsOfFile: fileName]; if ([data length] > 0) { NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData: data]; Student *student = [ NSData *theData = [NSData dataWithContentsOfFile: filename]; //创建一个NSKeyedUnarchiver实例对数据进行解码。 NSKeyedUnarchiver *archiver = [[NSKeyedUnarchiver alloc] initForReadingWithData: theData]; //使用与归档编码使用相同的键对象进行解码
而要解档使用数据,只要使用解档NSKeyedUnarchiver类中的+ (nullable id)unarchiveObjectWithData:(NSData *)data;方法就可以实现 NSUserDefaults standardUserDefaults] objectForKey:kEditInfraredRepeater]; NSArray *array = [NSKeyedUnarchiver
synchronize]; 读取 NSData *newPersonData = [standardDefaults objectForKey:"personKey"]; Person *Person = [NSKeyedUnarchiver
NSKeyedArchiver archiveRootObject:personList toFile:arcPath]; // 使用反归档类,获取已归档的数据 // Person person = [NSKeyedUnarchiver arcPath]; // NSLog( @"%@, %@, %ld", person.name, person.gender, person.age ) ; NSArray person = [NSKeyedUnarchiver
解决办法:实现真正的深拷贝 NSArray *trueDeepCopyArray = [NSKeyedUnarchiver unarchiveObjectWithData: [NSKeyedArchiver someArray copyItems:YES];就能实现真正的深拷贝 如果数组的层数多级,例如demo中的 - [ [model,model] ],必须用NSArray* trueDeepCopyArray = [NSKeyedUnarchiver
let data = try Data.init(contentsOf: URL(fileURLWithPath: path)) do{ return try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData true, "用户数据解档失败") } } catch { assert(true, "用户数据解档路径错误") } }else{ return NSKeyedUnarchiver.unarchiveObject
while (set.next) { NSData *data = [set objectForColumnName:@"shop"]; Shop *shop = [NSKeyedUnarchiver
getObject = [ud objectForKey:@"myBusinessCard"]; ClassA *bcNew = [[ClassA alloc] init]; bcNew = [NSKeyedUnarchiver
} -(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{ // 反归档 NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; self.filePathArray = [unarchiver