2016-07-19 9 views
2

私は各レベルで機能を追加するいくつかのクラスを通して約束をカスケードしようとしています。iOS(ObjC)PromiseKit - 約束内に約束を返す

exc_bad_access (code=1 address=0x10)

+ (AnyPromise *) method { 
    return [SomeClass whichReturnsPromise] 
    .then(^(id obj){ 
     // do stuff 
     return obj; 
    }); 
    } 

残念ながら、このコードは二行目でエラーを投げている:stackoverflowの

(注ちょうどreturn [SomeClass whichReturnsPromise]の呼び出しは正常に動作します)私が洗い上げてきた答えと上記のコード(javascriptで動作する)の多くのバリエーションを試しましたが、私は同じエラーが発生し続けます。これをどうやって解決するのですか?テストせず

答えて

2

約束を返すように変換される前に、[SomeClass which ReturnsPromise]nilを返していたというブレークケースが発生しました。値がnilの約束を返すように変更しました。今すぐ動作します。

0

、私は次のように動作するはずだと思う:

[self wait].then(^{ 
    return [SomeClass whichReturnsPromise]; 
}).then(^(id obj) { 
    return obj; 
}); 

私は以下の通りスウィフトですけど、あなたはAnyPromiseを持っている場合は、Promise<T>チェーンでそれを使用することができます。

someSwiftPromise().then { _ -> AnyPromise in 
    // provided by `pod PromiseKit/SystemConfiguration` 
    return SCNetworkReachability() 
}.then { (obj: AnyObject?) in 
    // AnyPromise always resolves with `AnyObject?` 
} 
+0

'[self wait]'はどのクラスですか?私はカスタムクラスで私のことを呼んでいます。 – smileham

+0

ああ、セミコロン ';'を 'return [SomeClass whichReturnsPromise]'に追加するとどうなりますか?同じエラーが出ますか? – fuzz

+0

あなたは '.then'句を取り出すのですか?エラーはありません。 – smileham