2011-09-09 16 views
0

HJCacheを使用して、私のアプリのウェブカメラから画像を表示しようとしています。
ウェブカメラは5分ごとに画像を更新します。
私は、ユーザーが新しいイメージ(利用可能な場合)を見るためにそれをクリックできるように、リフレッシュボタンを持っていたいと思います。これまで
マイコード:HJCacheを使用してイメージを更新する方法は?

-(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を指摘しました。私はOK、それを理解していれば、それは今私のコードので、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]; 
} 

私は何も起こりません更新ボタンをクリックすると、画像が更新されません。


:キャッシュファイルが削除されていない可能性があります(私が正しく理解していれば)、実際にはそうなっているようです。前と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: (
) 

「準備完了」と「ロード」objMan店はすでにダウンロードしたファイルは、それぞれ、ダウンロードされるディレクトリがあります。
問題は、objManを再度イメージ管理することにあるのでしょうか?

答えて

3

私は、ファイルキャッシュとメモリキャッシュの両方でオブジェクトマネージャを設定したと考えています。ファイルキャッシュを空にすると、静止画像がメモリキャッシュに残っていますか?オブジェクトマネージャをインスタンス化する

+0

---マークの答えは完全ではなかった、彼は私が彼を送った電子メールに返信するために非常に親切だった、完全な答えは: "私は両方のファイルキャッシュとメモリキャッシュファイルキャッシュを空にすると、メモリキャッシュに静止画像がありますか?メモリキャッシュのサイズが0のオブジェクトマネージャをインスタンス化してみてください。または、キャッシュを空にする場合は、オブジェクトマネージャ自体を再インスタンス化します。私はおそらく、オブジェクトマネージャ自体にemptyCacheメソッドを持っているはずです。 "そして、はい、0メモリサイズでインスタンス化すると問題は解決しました。 –

0

あなたが唯一のイメージを持っている場合、あなたは唯一のイメージをリフレッシュしたい場合は、別のディレクトリに保存することができ、代わりにこの方法を使用[objMan emptyCache]; を使用することができます:あなたは、もちろん

[objMan deleteAllFilesInDir:path]; 

[self.objMan manage:img1]; 
+0

ありがとう、私はあなたの提案を反映して質問を編集しました。 –

+0

deleteAllFilesInDirを呼び出そうとしましたか?以前と同じディレクトリを指定するだけです。 – ender

+0

[self.objMan manage:img1]を呼び出す前に[img1 clear]に電話してみてください – ender

関連する問題