2011-09-09 86 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的暗示?

編輯:恩德指出我爲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和emptyCache後:

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

我認爲它,因爲你同時具有文件高速緩存和內存高速緩存配置的對象管理器。當清空文件緩存時,內存緩存中仍有圖像?試試instanciating對象管理器與

+0

--- Mark的答案並不完整,他很友善地回覆我發給他的郵件,完整的回答是:「我認爲它是因爲你配置了對象管理器和兩個一個文件緩存和一個內存緩存當你清空文件緩存時,內存緩存中仍然有圖像?試着爲內存緩存實例化0大小的對象管理器。或者,當您要清空緩存時,請重新創建對象管理器本身。我應該在對象管理器本身上有一個emptyCache方法。「是的,使用0內存大小實例化解決了我的問題。 –

0

,如果你只是有一個形象,你可以使用[objMan emptyCache]; 如果你想只刷新的圖像,你可以將其保存在不同的目錄,並用這個方法來代替:

[objMan deleteAllFilesInDir:path]; 

當然,你將不得不再次進行查詢:

[self.objMan manage:img1]; 
+0

謝謝,我編輯了反映您的建議的問題。 –

+0

你有沒有試過調用deleteAllFilesInDir?只需指定與以前相同的目錄即可。 – ender

+0

在調用[self.objMan manage:img1] – ender