Как обновить изображения с помощью HJCache? - PullRequest
0 голосов
/ 09 сентября 2011

Я пытаюсь отобразить изображение с веб-камеры в моем приложении, используя HJCache .
Веб-камера обновляет свое изображение каждые 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?

Редактировать : Эндер указал мне на 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];
}

Это не работает, хотя, когда я нажимаю кнопку обновления, ничего не происходит, изображение не обновляется.
Есть идеи?

Редактировать : Эндер предположил, что, возможно, файлы кэша не удаляются с помощью 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 снова управлял изображением?

Ответы [ 2 ]

3 голосов
/ 09 сентября 2011

Я думаю, это потому, что вы настроили диспетчер объектов как с файловым кешем, так и с кешем памяти. Когда вы очищаете файловый кеш, в кеше памяти остаются изображения? Попробуйте создать экземпляр менеджера объектов с помощью

0 голосов
/ 09 сентября 2011

если у вас есть только изображение, вы можете использовать [objMan emptyCache]; Если вы хотите обновить только изображение, вы можете сохранить его в другом каталоге и использовать вместо этого этот метод:

[objMan deleteAllFilesInDir:path];

Конечно, вам придется повторить запрос:

[self.objMan manage:img1];
...