0

NSMutableArray feed.leagues には<MLBLeagueStandings: 0xeb2e4b0> 、ファイルに書き込み、ファイルから読み取りたいという 2 つのオブジェクトがあります。これは私がやったことです:

- (void)encodeWithCoder:(NSCoder *)encoder {
    [encoder encodeObject:feed.leagues forKey:@"feed.leagues"];
}

- (id)initWithCoder:(NSCoder *)decoder {
    if (self = [super init]) {
        self.feed.leagues = [decoder decodeObjectForKey:@"feed.leagues"];
    }
    return self;
}

-(void)saveJSONToCache:(NSMutableArray*)leaguesArray {
    NSString *cachePath = [self cacheJSONPath];

    [NSKeyedArchiver archiveRootObject:feed.leagues toFile:cachePath];
    NSMutableArray *aArray = [NSKeyedUnarchiver unarchiveObjectWithFile:cachePath];
    NSLog(@"aArray is %@", aArray);
}

-(NSString*)cacheJSONPath
{

   NSString *documentsDirStandings = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
   NSString *cacheJSONPath = [NSString stringWithFormat:@"%@/%@_Standings.plist",documentsDirStandings, sport.acronym];
return cacheJSONPath;
}
4

1 に答える 1

1

オブジェクト: MLBLeagueStandings はシリアライズ可能であり、NSCoding プロトコルに応答する必要があります:

@interface MLBLeagueStandings : NSObject <NSCoding>{

}

MLBLeagueStandings クラス ファイル (.m) に次のメソッドを追加します。

- (id)initWithCoder:(NSCoder *)decoder;
{
  self = [super initWithCoder:decoder];
  if(self)
  {
    yourAttribute = [decoder decodeObjectForKey:@"MY_KEY"]
    //do this for all your attributes
  }
}

- (void)encodeWithCoder:(NSCoder *)encoder;
{
  [encoder encodeObject:yourAttribute forKey:@"MY_KEY"];
  //do this for all your attributes
}

実際、オブジェクトをファイル (あなたの場合は配列) に書き込みたい場合、この配列に含まれるすべてのオブジェクトは NSCoding プロトコルに準拠する必要があります。

さらに、例が必要な場合:ここに良いチュートリアルがあります

それがあなたを助けることを願っています。

NB : プリミティブ型 (int、float など) をエンコード/デコードする場合は、次を使用します。

[encode encodeInt:intValue forKey:@"KEY"];

(アップルドキュメントの詳細情報)

于 2012-10-22T06:34:38.863 に答える