2012-03-29 13 views
2

我使用Facebook的iOS SDK的一個項目,如果我做一個請求之後,接收應答之前彈出一個UIViewController我得到一個EXC_BAD_ACCESS當它試圖看看是否委託響應選擇器。那麼,委託是已經彈出的UIViewController,所以它可能不再存在。的iOS SDK的Facebook不保留委派引起EXC_BAD_ACCESS

在研究這個問題時,我偶然發現了this這裏的答案告訴我,我不應該因爲委託被保留而出現這個問題。但答案有點老,他們之後開始使用弧。所以我檢查了SDK,發現他們不再保留它了。

這是一個已知的問題?我在這裏錯過了什麼嗎?

我嘗試修改SDK並保留委託並且問題消失。不過,我不喜歡修改第三方庫,因爲我沒有那麼多的專業知識,我不確定在這種情況下arc是否真的存在問題(我認爲我們不需要使用retain/release/autorelease了)。此外,我認爲這是Facebook的SDK,如果它是一個人應該已經偶然發現同樣的問題並解決它的錯誤。

編輯:我現在認識到,至少我使用Facebook的SDK中沒有使用弧形的版本(我不知道他們是否已經支持它),問題可能是這樣的:

@property(nonatomic,assign) id<FBRequestDelegate> delegate; 

不應該保留嗎?

EDIT2:對不起,我通過另一個answer前面掛同一職位跳過。

看來我指出的是,現在在SDK的新版本過時。最好的辦法似乎是取消請求。

回答

0

它不應該被保留?

絕對不是。如果你這樣做,那麼你很可能會有一個保留週期(VC擁有擁有VC的FBRequest)。

當視圖控制器被釋放時,您正確的做法是取消請求,或者更好的辦法是將請求的委託設置爲nil,然後取消它。