1

私は現在、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で確認できます 。ダウンロード ラッパーをコミットしましたが、ヘッダーにはまだドキュメントがありません。

4

0 に答える 0