我正在尝试将多个文件下载进度值更新为表格单元格上的 UIProgressView。我有 FileDownloader 类,它具有执行异步下载操作的 NSOperationQueue。我正在考虑使用 FileDownloader 类中的“委托”来更新 UI。但我无法编译代码。我有 FileDownloader 作为单例。我想知道我是否缺少理解一些基本的东西。
以下是代码的设置。
文件下载器.h
#import < Foundation/Foundation.h >
// declare protocol to accept progress status of file downloads
@protocol FileDownloaderDelegate < NSObject >
// this function will update the progressview and re-display the cell
- (void) updateProgessWithCurrentValue:(NSNumber*)value totalValue:(NSNumber*)totalValue;
@end
@interface FileDownloader : NSObject {
NSOperationQueue *operationQueue; // for file download operations
id < FileDownloaderDelegate > delegate; // to send progess value to UI
}
@property (nonatomic, retain) NSOperationQueue *operationQueue;
@property (nonatomic, assign) id < FileDownloaderDelegate > delegate;
+(FileDownloader*) sharedInstance; // FileDownloader is Singleton with its standard methods
// when download is progressing, the delegate function will be called like
// [self.delegate updateProgessWithCurrentValue:10 totalValue:100];
//
@end
MyTableViewCell.h
#import < UIKit/UIKit.h >
#import < FileDownloader.h >
@interface MyTableViewCell : UITableViewCell < FileDownloaderDelegate > {
UIProgressView *progressView;
}
@property (nonatomic, retain) UIProgressView *progressView;
// MyTableViewCell.m will have the implementation of
// - (void) updateProgessWithCurrentValue:(NSNumber*)value totalValue:(NSNumber*)totalValue;
// to update UI
@end
首先,我在 MyTableViewCell 中出现“找不到 FileDownloaderDelegate 的协议声明”编译器错误。所以我把 FileDownloaderDelegate 的协议声明移到一个单独的 .h 文件中以便能够编译。即使那样,我仍然无法使用我的 tableViewController 分配给委托
[[FileDownloader sharedInstance] setDelegate:myTableViewCell];
我收到“ FileDownloader 可能无法响应 setDelegate 方法”警告,这意味着它不知道委托(尽管我有“@synthesize 委托”)。我想知道我是否不了解单例或委托用法。