要更新UIProgressView以进行多个文件下载(如何使用委托)?

时间:2009-12-14 22:36:12

标签: cocoa-touch download singleton delegates uiprogressview

我正在尝试将多个文件下载进度值更新为表格单元格上的UIProgressView。我有FileDownloader类,它有NSOperationQueue,可以执行异步下载操作。我想使用FileDownloader类中的“委托”来更新UI。但我无法编译代码。我有FileDownloader作为Singleton。我想知道我是否缺席了解一些基本的东西。

以下是代码的设置。

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委托”)。我想知道我是否对单身人士或委托使用情况不了解。

1 个答案:

答案 0 :(得分:0)

您的+sharedInstance方法会返回ContentSyncer*,而不是FileDownloader*。这可能是setDelegate: not found警告的原因。

此外,您可以并且应该在FileDownloader.h中定义FileDownloaderDelegate协议。在MyTableViewCell.h中导入此头文件,但使用引号而不是天使括号。如,

#import "FileDownloader.h"