iOS 데이터 영구화 대상의 압축 및 해제

3887 단어
위에서 설명한 바와 같이 압축 파일(arching)도 다른 형식의 서열화를 가리킨다.그러나 강력한 것은 모든 대상이 실현할 수 있는 보다 일반적인 저장 데이터 형식이다.압축 파일과 압축 파일을 해제하는 개발 중입니다.우리가 함께 실현해야 할 것은 NSCodingNSCopying 협의도 있다. 표량( int float)과 대다수FoundationCocoa Touch류가 모두 NSCoding 협의를 따르기 때문에 (예외가 있다. 예를 들어 UIImage가 따르지 않는 경우) 대부분의 종류는 비교적 쉽게 압축 파일 조작을 실현할 수 있다.
1. NSCoding 협의에 따라 NSCopying 협의NSCoding 협의에 따라 두 가지 방법을 성명했다.하나는 대상을 압축 파일에 인코딩하는 것이고, 다른 하나는 압축 파일에 대한 디코딩으로 우리가 이전에 압축한 대상을 복원하는 것이다. 사용 방법은 NSUserDefaults와 비슷하며, KVC로 대상과 원본 데이터 형식( int float)을 인코딩하고 디코딩할 수 있다.NSCopying 프로토콜은 부치 대상을 허용하는 데 사용되며 데이터 모델 대상을 사용할 때 비교적 유연성을 가진다.
2, 아카이브\압축 해제 아카이브: 객체를 NSKeyedArchiver 인스턴스에 아카이브하는 데 사용되는 NSMutableData 인스턴스를 만듭니다. 이때 NSMutableData는 인코딩된 데이터를 포함하고 키/코드를 사용하여 필요한 대상을 압축하고 마지막으로 완성을 알리며 파일 시스템에 기록합니다.
압축 파일 해제: 압축 파일 대상의 절차와 비슷합니다. 데이터를 불러오는 데 사용할 NSData 실례를 만들고 NSKeyedUnarchiver 실례를 만들어서 데이터를 디코딩한 다음 이전 키로 읽기 대상을 만듭니다.마지막으로 프로그램 해제 완료를 알립니다.
a. "linePesist"클래스 생성
Xcode에서 Persistence2라는 이름의 새 프로젝트를 Single View Application 템플릿으로 만듭니다.그러나 새 파일을 만들거나command+N을 누르거나 File 메뉴에서 New->New File을 순서대로 선택해야 합니다.새 파일 마법사가 나타나면 Cocoa Touch를 선택하고 Objective-C class를 선택하고Next를 누르면 클래스를'line Pesist'로 명명하고'Subclass of'표시줄에서 NSObject를 선택하고 Next를 누르고 Create를 누르십시오.이 클래스는 우리의 데이터 모델로 사용되며 속성 목록에 적용되는 사전의 데이터를 저장하는 데 사용됩니다.다음과 같이 코드를 수정하려면 "linePesist.h"를 클릭합니다.
#import 
// NSCoding、NSCopying 
@interface linePesist : NSObject
@property (nonatomic,copy)NSArray *array;
@end

이것은 텍스트 상자의 데이터 필드에 사용할 수 있는 그룹 형식을 가진 간단한 데이터 모델입니다.다음은 "linePesist.m"편집입니다.
#import "linePesist.h"
#define CodeStr @"CodeStr" 
// 
@implementation linePesist
/*  NSCoding NSCoping , 。*/
 
#pragma mark -- Coding
// 
-(void)encodeWithCoder:(NSCoder *)aCoder{ 
[aCoder encodeObject:self.array forKey:CodeStr];
}
 
// 
-(id)initWithCoder:(NSCoder *)aDecoder{ 
self = [super init]; 
if(self) { self.array = [aDecoder decodeObjectForKey:CodeStr]; 
} 
return self;
}
 
#pragma mark -- Coping
-(id)copyWithZone:(NSZone *)zone{ 
linePesist *copy = [[[self class]allocWithZone:zone] init];
 NSMutableArray *muAr = [[NSMutableArray alloc]init]; 
for(id line in self.array) { 
[muAr addObject:[line copyWithZone:zone]]; 
} 
copy.array = muAr; return copy;
}
@end

미리 정의된'CodeStr'를 인코딩 키로 하고 4개의 텍스트 상자의 문자열을 저장한 다음에 같은'CodeStr'키로 디코딩하여 4개의 문자열을copyWithZone이 만든linePesist 대상에 복사한다.
b. ViewController 클래스 구현
아카이빙할 수 있는 데이터 객체를 만든 후에는 이를 사용하여 영구적인 스토리지를 구축할 수 있습니다."ViewController.m"편집 인터페이스를 클릭하고 다음 삭제된 부분의 코드 편집을 진행합니다
#import "ViewController.h"
#import "linePesist.h"
// 
#define CodeString  @"CodeString"
@implementation ViewController
 
-(NSString *)dataFile{ 
NSArray *ar = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES); 
NSString *fielpath = [ar objectAtIndex:0];
return [fielpath stringByAppendingPathComponent:@"data.archive"]; 
// , , 。  。。archive 
}
- (void)viewDidLoad { 
[super viewDidLoad]; 
 
NSString *filepath = [self dataFile]; 
NSLog(@"%@",filepath); 
 
if([[NSFileManager defaultManager]fileExistsAtPath:filepath]) { 
// 2  
NSData *data = [[NSData alloc]initWithContentsOfFile:filepath]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data]; 
// 。 linepesist 
linePesist *linepesist =[unarchiver decodeObjectForKey:CodeString]; [unarchiver finishDecoding]; 
//  

자, 속성 목록, 압축 파일 해제 대상의 저장 방법은 우리가 여기까지 소개했는데 독자들은 어떤 차이가 있는지 비교해 볼 수 있다. 으.. 가장 뚜렷한 것은 압축 파일의 코드량이 많을 것이다. 그러나 그에 상응하여 압축 파일은 매우 좋은 신축성을 가지게 될 것이다. 적어도 코드에서 보면 이렇다.

좋은 웹페이지 즐겨찾기