2011-08-15 13 views
1

のための私のカスタムクラスをロード/ストアする方法についての簡単なサンプルを必要とする私は、次のObjective-Cのクラスがあります。は、iOSの開発

@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"]; 
} 

P.S.:ここ @interface LatLongData <NSCoding>


は、いくつかのプロトコルメソッドです
最後の行にあるtheDataloadedData

に置き換える必要があります