0

複数ファイルのダウンロードの進行状況の値をテーブルセルのUIProgressViewに更新しようとしています。非同期ダウンロード操作を行うNSOperationQueueを持つFileDownloaderクラスがあります。FileDownloaderクラスの「デリゲート」を使用してUIを更新することを考えています。しかし、コードをコンパイルすることはできません。私はFileDownloaderをシングルトンとして持っています。何か基本的なことを理解するのに欠けているのではないかと思います。

コードの設定は次のとおりです。

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デリゲート」はありますが)。シングルトンまたはデリゲートの使用法について何かを理解していないのではないかと思います。

4

1 に答える 1

0

メソッドはではなく を+sharedInstance返します。それが警告の原因である可能性があります。ContentSyncer*FileDownloader*setDelegate: not found

また、FileDownloader.h で FileDownloaderDelegate プロトコルを定義できますし、定義する必要があります。このヘッダー ファイルを MyTableViewCell.h にインポートしますが、エンジェル ブラケットの代わりに引用符を使用します。例えば、

#import "FileDownloader.h"
于 2009-12-15T00:17:23.043 に答える