2016-07-19 55 views
2

我試圖通過一些在每個級別添加功能的類級聯承諾。iOS(ObjC)PromiseKit - 在承諾內退回承諾

exc_bad_access (code=1 address=0x10)

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

遺憾的是這段代碼是在第二行拋出一個錯誤(注:只調用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

什麼班是[自我等待]?我在自定義班上打電話給我。 – smileham

+0

哦,那麼如果你給你的'return [SomeClass whichReturnsPromise]'添加分號';'會發生什麼。你有同樣的錯誤嗎? – fuzz

+0

你的意思是如果我拿出'.then'子句?沒有錯誤。 – smileham