플랫폼 : XCode5 언어 : Objective C 프로젝트 : iOS 앱
나는 기본적으로 Java 및 C # 배경에서 왔으며 이것이 첫 번째 iOS 앱이므로 심각하게 제한되어 있습니다.
사용자 데이터를 저장해야하는 애플리케이션에서 작업 중입니다. 약 10 개의 데이터 모델 클래스가 있으며 일부 클래스에는 사용자 정의 유형의 속성이 있습니다. 모든 모델의 총 레코드 수는 앱 사용 수명 동안 1000 개 미만입니다. 기본적으로 단일 날짜에 각 날짜 모델의 개체를 하나만 생성 할 수 있습니다. "일자 d에 대해 데이터 모델 유형 X의 하나의 레코드 표시"와 같은 기본 쿼리를 제외하고는 저장된 데이터에 대한 쿼리가 많지 않습니다.
각 데이터 모델의 레코드를 간단한 텍스트 파일이나 직렬화를 사용하여 직렬화하는 간단한 접근 방식을 사용하려고합니다. 따라서 새 레코드가 생성 될 때마다 직렬화되어 이전 레코드를 포함하는 파일에 기록됩니다.
파일의 모든 기존 레코드를 NSMutableArray로 역 직렬화하고 새 레코드를 추가 한 다음 새 NSMutableArray를 다시 직렬화해야한다는 것을 이해합니다. Generics 또는 NSMutableObject를 사용하여 정적 함수가있는 클래스를 만드는 것을 선호합니다.
이제 질문은 다음과 같습니다. 1. 위에서 설명한 시나리오를 고려하여 여기서 직렬화 / 역 직렬화하는 가장 좋은 방법은 무엇입니까? 속성 목록 및 NScoding 프로토콜에 대해 읽었습니다. NSCoding 프로토콜을 사용하는 경향이 있습니다. 올바른 접근 방식일까요?
직렬화해야하는 모든 속성이 키 / 값 쌍으로 언급되는 initWithCoder 함수를 구현해야한다고 읽었습니다. 일부 속성이 사용자 지정 유형 인 경우 여기에서 무엇을해야합니까? 예를 들어, "room"이라는 클래스에 대해 "distance"유형의 length라는 속성이 있습니다. 여기서 "distance"는 정수 유형의 두 가지 속성 (피트 및 인치)이있는 클래스입니다. 그리고 예,이 원거리 공간은 내 문제에 대한 해결책을 이해하는 예일뿐입니다.
사용자 지정 형식의 일부 속성이있는 사용자 지정 형식의 serialization / deserialization 개체에 대한 자세한 내용은 다시 한 번 감사하겠습니다.
iOS에서 NSData로 무언가를 직렬화하는 가장 간단한 방법은 NSKeyedArchiver / NSKeyedUnarchiver를 사용하는 것입니다. 커스텀 객체의 경우 NSCoding 프로토콜을 구현해야합니다.
배열에 저장하는 객체는 NSCoding도 지원해야합니다.
그러나 역 직렬화 할 때 NSMutableArray 개체 대신 변경 불가능한 NSArray 개체를 받게됩니다. 변경 가능한 인스턴스를 얻으려면
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self)
{
myMutableArray = [NSMutableArray arrayWithArray:[aDecoder decodeObjectForKey:@"myMutableArray"]];
}
return self;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다