如何使用HJCache刷新图像?

时间:2011-09-09 10:46:13

标签: iphone objective-c ios hjcache

我正在尝试使用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的提示吗?

编辑: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: (
)

“就绪”和“正在加载”是objMan分别存储已下载和下载的文件的目录 也许问题在于让objMan再次管理图像?

2 个答案:

答案 0 :(得分:3)

我认为是因为您使用文件缓存和内存缓存配置了对象管理器。清空文件缓存时,内存缓存中仍有图像?尝试使用

实例化对象管理器

答案 1 :(得分:0)

如果您只有图片,可以使用[objMan emptyCache]; 如果您只想刷新图像,可以将其保存在不同的目录中,而是使用此方法:

[objMan deleteAllFilesInDir:path];

当然,您必须再次进行查询:

[self.objMan manage:img1];