私は現在、Dropbox、Google Drive、および Box.com SDK のいくつかのメソッドのブロック ベースのラッパーを作成しています。アップロード機能を 3 つすべてにラップすることに成功し、すべてうまく機能します。ラッパーには、3 つのサービス間で共通の仕様に準拠する「共通」のインターフェイスがあります。これが、私がこれを行っている理由です。
デリゲート コールバックで実行されるのは Dropbox だけです。アップロードクラスに問題はありません。ただし、いくつかのダウンロード クラスを同じ方法で実装しようとしています。これまでのところ、ラッパーのデリゲート メソッドが呼び出される前に、返されたインスタンスの割り当てがすぐに解除されるという問題が発生しています。まず、_ working _ "Upload" クラスのメソッド構造を確認してください。
+(id)uploaderWithPaths:(NSMutableDictionary *)paths
progress:(JAUploadProgressBlock)progBlock
completed:(JAUploadCompletedBlock)compBlock
failed:(JAUploadFailedBlock)failBlock;
-(void)upload;
//in .m
return [[[self class] alloc]initWithPaths:paths
progress:progBlock
completed:compBlock
failed:failBlock];
-(void)upload {
//setup Dropbox Rest Client
//configure delegate, etc
[dbRestClient doUpload...];
}
//delegate stuff
..onProgress {
self.progressBlock(progress);
..onComplete {
self.completedBlock(info);
..onFailed {
self.failedBlock(error);
したがって、アップロードのインスタンス化と実行は次のようになります。
JAUploadProgressBlock progress = ^(CGFloat percentage) {
NSLog(@"%.2f",percentage); }
JAUploadCompletedBlock completed = ^(NSMutableDictionary *info) {
NSLog(@"Success: %@",info); }
JAUploadFailedBlock failed = ^(NSError *error) {
NSLog(@"Failed: %@",[error localizedDescription];
JAUploadWrapperDropbox *uploader
= [JAUploadWrapperDropbox uploaderWithPaths:paths
progress:progress
completed:completed
failed:failed];
[uploader upload];
アップロード ラッパー クラスでは、インスタンスの割り当てがすぐに解除されず、ラッパー内のデリゲート メッセージが呼び出され、ブロック コールバックが起動し、すべてが計画どおりに進みます。
ただし、アップロード ラッパーとまったく同じようにモデル化されたダウンロード ラッパー クラスは、ラッパーのデリゲート メソッドが呼び出される前に割り当てが解除されます。
このクラスは、再利用に適していないため、プロパティにするのに役立ちません。それは本当に一度またはワンオフとして使用することを意図しています。強力なプロパティを使用すると問題は解決しますが、前述のように、アップロード ラッパー クラスにプロパティを使用する必要はありません。
私は何を間違っていますか?
このプロジェクトはhttps://github.com/justinxxvii/JAOperationWrapperで確認できます 。ダウンロード ラッパーをコミットしましたが、ヘッダーにはまだドキュメントがありません。