0

HJCacheを使用して、アプリでウェブカメラから画像を表示しようとしています。
Web カメラは 5 分ごとに画像を更新します。
ユーザーがクリックして新しい画像を表示できるように、更新ボタンが必要です (利用可能な場合)。
これまでの私のコード:

-(void)viewDidLoad {
    // init HJObjManager
    objMan = [[HJObjManager alloc] initWithLoadingBufferSize:6 memCacheSize:20];
    // refresh button
    UIBarButtonItem *buttonRefresh = [[UIBarButtonItem alloc]
                     initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
                     target:self
                     action:@selector(refreshPhoto:)];
    self.navigationItem.rightBarButtonItem = buttonRefresh;
    [buttonRefresh release];
    NSURL *url =  [NSURL URLWithString: @"http://webcamurl"];
    img1.url = url;
    [self.objMan manage:img1];
}

-(IBAction) refreshPhoto: (id) sender {
    // ?
}

refreshPhoto の実装方法のヒントを教えてください。

編集:enderは私にemptyCacheを指摘しました。理解できれば、HJMOFileCache で使用する必要があるため、私のコードは次のようになります。

-(void)viewDidLoad {
    NSString *documentsDirectory;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    documentsDirectory = [paths objectAtIndex:0];
    documentsDirectory = [documentsDirectory stringByAppendingPathComponent:@"imageCache/"];
    objMan = [[HJObjManager alloc] initWithLoadingBufferSize:6 memCacheSize:20];
    HJMOFileCache* fileCache = [[[HJMOFileCache alloc] initWithRootPath:documentsDirectory] autorelease];
    fileCache.fileCountLimit = 100;
    fileCache.fileAgeLimit = 300; // 5 min
    objMan.fileCache = fileCache;
    // refresh button 
    UIBarButtonItem *buttonRefresh = [[UIBarButtonItem alloc]
                     initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
                     target:self
                     action:@selector(refreshPhoto:)];
    self.navigationItem.rightBarButtonItem = buttonRefresh;
    [buttonRefresh release];
    NSURL *url =  [NSURL URLWithString: @"http://webcamurl"];
    img1.url = url;
    [self.objMan manage:img1];
    [super viewDidLoad];
}

-(IBAction) refreshPhoto: (id) sender {
    [self.objMan.fileCache emptyCache];
    [self.objMan manage:img1];
}

ただし、更新ボタンをクリックしても何も起こらず、画像が更新されません。
何か案が?

編集: ender は、キャッシュ ファイルが emptyCache によって削除されない可能性があることを示唆しましたが (私が正しく理解している場合)、実際には削除されているようです。
emptyCache の前後の NSLog から:

2011-09-09 16:57:33.842 Ready dir before emptyCache: (
    "http:__www.meteogallipoli.it_cam_cam1.jpg"
)
2011-09-09 16:57:33.845 Loading dir before emptyCache: (
)
2011-09-09 16:57:33.856 Ready dir after emptyCache: (
)
2011-09-09 16:57:33.859 Loading dir after emptyCache: (
)

"Ready" と "Loading" は、objMan がダウンロード済みのファイルとダウンロード中のファイルを格納するディレクトリです。
たぶん、問題は objMan に画像を再度管理させることにあるのでしょうか?

4

2 に答える 2

3

オブジェクト マネージャーにファイル キャッシュとメモリ キャッシュの両方を構成したためだと思います。ファイル キャッシュを空にしても、メモリ キャッシュに画像が残っていますか? オブジェクトマネージャーをインスタンス化してみてください

于 2011-09-09T18:03:45.877 に答える
0

画像しかない場合は、使用できます。[objMan emptyCache]; 画像のみを更新したい場合は、別のディレクトリに保存して、代わりに次の方法を使用できます。

[objMan deleteAllFilesInDir:path];

もちろん、クエリを再度作成する必要があります。

[self.objMan manage:img1];
于 2011-09-09T10:58:17.563 に答える