2

ここ数か月間、iPhone アプリを開発してきました。最近、パフォーマンスを向上させ、UI で使用されるいくつかの画像をキャッシュしたいと考えました。画像はユーザーによって Web からランダムにダウンロードされるため、特定の画像をプロジェクトに追加することはできません。私はすでに NSUserDefaults を使用して、アプリ内の他の情報を保存しています。

だから今、UIImagesの辞書をNSUserDefaultsオブジェクトに保存して取得しようとしています...

-[UIImage encodeWithCoder:]: 認識されないセレクターがインスタンスに送信されました

次に、UIImage を UISaveableImage という名前のクラスでサブクラス化し、NSCoding を実装することにしました。だから今私は...

@implementation UISaveableImage

-(void)encodeWithCoder:(NSCoder *)encoder
{
   [encoder encodeObject:super forKey:@"image"];
}

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

@end

これは、私が始めた場所よりも優れているわけではありません。UIImage を NSData に変換できれば問題ありませんが、見つけられるのは UIImagePNGRepresentation のような関数だけで、これがどのタイプの画像であるかを知る必要があります。UIImage で許可されていないこと。考え?間違った道に迷い込んだような気がします...

4

2 に答える 2

6

NSUserDefaults に画像を保存したくありません。それらはデータの大きな塊であり、NSUserDefaults は plist として保存されます。小さな情報を書きたいとします。

イメージをディスクに書き込み、ファイル名をデフォルトに保存する必要があります。

NSString   *filename = myImageFilename;
[UIImagePNGRepresentation(image) writeToFile: myImageFilename atomically];
[[NSUserDefaults standardDefaults] setObject: myImageFilename forKey: @"lastImageFilename"]; 
于 2010-04-12T20:40:26.033 に答える
1

1年後にこれに出くわします。画像をキャッシュ ディレクトリに保存し、iTunes がそれらをバックアップしようとしないようにする必要があることを (他の誰かがここでつまずいた場合に備えて) 追加します。

- (NSString *)pathForSearchPath:(NSSearchPathDirectory)searchPath {
  NSArray *paths = NSSearchPathForDirectoriesInDomains(searchPath, NSUserDomainMask, YES);
  NSString *directoryPath = [paths objectAtIndex:0];
  return directoryPath;
}

- (NSString *)cacheDirectoryPath {
  return [self pathForSearchPath:NSCachesDirectory];
}
于 2011-07-07T01:11:36.430 に答える