2016-03-21 5 views
-2

長時間実行されているプロセスを呼び出すメソッドがあります。長時間実行されているプロセスとAFNetworkingを使用し、ブロックを使用して成功ブロックと失敗ブロックを返します。だから、私は自分のメソッドをテストしようとしています。成功ブロックが呼び出される前にテストが失敗します。私は私の方法でブロックを使うようにしようと考えた。私はブロックを使用するように変更することができたが、bool isFinishedのみを使用し、戻り値は無効です別のメソッドがあります。私が難しいメソッドは、NSDecimalNumber *を返す必要があり、NSStringをとります。ブロックを使用するObjective-cメソッド

メソッドシグネチャ

  • (NSDecimalNumber *)getRate:(NSStringの*)rateCode。私はAFNetworking方法が成功ブロック

    に入ったとき、私はまた、内のメソッドを呼び出すとできるようにしたい設定BOOLで完全ブロックを追加することができるようにしたいと思い

完了ブロックは、返されたNSDecimalNumber *値にアクセスします。

可能ですか?もしそうなら、私に方法を教えてください。

+0

これは可能性が...のようになりますhelp http://goshdarnblocksyntax.com – nielsbot

+0

メソッドの先頭に「get」を付けないでください。 。 – bbum

答えて

3

あなたはおそらくそれを分割する必要があります。

- (void)fetchRate:(NSString*)rateCode completion:(void (^)(NSDecimalNumber *))completion; 

は次に、このように呼び出す:

あなたは完了ブロックを取るfetchRate:方法を持つことができます

void (^completion)(NSDecimalNumber *) = ^(NSDecimalNumber * rate){ 
    // this is called when rate is returned from your webservice 
} 

// call fetchRate: now, results will arrive later... 
[ myObj fetchRate:<rate code> completion:completion ]; 

// code here runs immediately; the results come back later. 

-fetchRate:

- (void)fetchRate:(NSString *)rateCode completion:(void (^)(NSDecimalNumber *))completion 
{ 
    void (^asiCompletionBlock)(/*args*/) = ^(/*...args...*/){ 
     // called after ASI request completes 

     NSDecimalNumber * answer = /* get answer from ASI HTTP response */ 

     // call our completion block that was passed in: 
     completion(answer); 
    }; 

    // do your asi HTTP request here, pass asiCompletionBlock for completion arg 
} 
+0

...それを「fetchRate」などと呼びます(「** get ** Rate」ではなく)(https://developer.apple.com/library/mac/documentation/General/Conceptual/DevPedia-CocoaCore /AccessorMethod.html)。 –

+0

良い点、私は私の答えを更新しました。 – nielsbot

+0

okですが、fetchRateの呼び出しに問題があります –

関連する問題