2011-08-15 3 views
1

내 사용자 정의 클래스를로드하는 방법에 대한 간단한 샘플이 필요 나는이 다음 목표 - C 클래스 :는/저장 아이폰 OS 개발

@interface LatLongData { 
    NSMutableString *_lat; 
    NSMutableString *_long; 
    NSMutableString *_altitude; 
} 

-(LatLongData*) initWithLat:(NSMutableString*) latitude Long:(NSMutableString*) longitude Altitude:(NSMutableString*) altitude; 

@end 

어떻게 그 객체의 인스턴스를로드/저장할 수 있습니까? 나는 다음과 같은 코드 작업을 시도했다 :

LatLongData *data = [[LatLongData alloc] initWithLat:_lat Long:_long Altitude:_altitude]; 

// Save 
NSData *theData = [NSKeyedArchiver archivedDataWithRootObject:data]; 
[[NSUserDefaults standardUserDefaults] setObject:theData forKey:LatLongDataKey]; 

//... 

// Load 
NSData *loadedData = [[NSUserDefaults standardUserDefaults] dataForKey:LatLongDataKey]; 
LatLongData *ldata = (LatLongData *)[NSKeyedUnarchiver unarchiveObjectWithData:theData]; 

그러나 나는 그와 운이 없다 ... 을 내가 코어 데이터에 대한 모든 것을 읽어야 알고있다. 나는이 시점에서 내 작은 샘플을 작동시키는 것이 좋을 것이다.

답변

3

NSCoding protocol을 수업에 사용해야합니다.

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    if ((self = [super init])) { 
     lat = [[aDecoder decodeObjectForKey:@"lat"] copy]; 
     long = [[aDecoder decodeObjectForKey:@"long"] copy]; 
     alt = [[aDecoder decodeObjectForKey:@"alt"] copy]; 
    } 
    return self; 
} 

- (void)encodeWithCoder:(NSCoder *)aCoder 
{ 
    [aCoder encodeObject:lat forKey:@"lat"]; 
    [aCoder encodeObject:long forKey:@"long"]; 
    [aCoder encodeObject:alt forKey:@"alt"]; 
} 

추신 : 여기 @interface LatLongData <NSCoding>


몇 프로토콜 방법이 있습니다
마지막 줄의 theDataloadedData

으로 대체해야합니다.