我有一個單獨的類我想處理來自ASIHTTPRequest的響應,所以我創建了一個類的實例,然後將它傳遞給我的請求。問題是我的委託類在請求結束之前被釋放。didFinishSelector的自定義委託類ASIHTTPRequest被釋放之前被稱爲
我正在使用ARC。我如何確保代表保留爲didFinish/didFail選擇器?
-(void)getStuff
{
NSURL *url = [NSURL URLWithString:@"http://example.com/json"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
UpdateFeedDelegate *updateFeedDelegate = [[UpdateFeedDelegate alloc] init];
[request setDelegate:updateFeedDelegate];
[request setDidFinishSelector:@selector(updateTestDone:)];
[request setDidFailSelector:@selector(getSingleUpdateFeedBackgroundRequestFailed:)];
[request startAsynchronous];
}
在此示例中,選擇器類按預期方式存在。我得到的錯誤:
*** -[UpdateFeedDelegate respondsToSelector:]: message sent to deallocated instance 0x56efb50
*** NSInvocation: warning: object 0x56efb50 of class '_NSZombie_UpdateFeedDelegate' does not implement methodSignatureForSelector: -- trouble ahead
*** NSInvocation: warning: object 0x56efb50 of class '_NSZombie_UpdateFeedDelegate' does not implement doesNotRecognizeSelector: -- abort
謝謝。因爲我一次可能有很多請求,並且我需要爲每個請求使用一個新的委託對象,並且據我瞭解,默認情況下,所有實例變量和局部變量都是強指針,我仍然不確定如何實現此目的。我不能使用強大的財產,因爲我不知道我需要多少財產。 – 2012-08-03 15:31:34
在這種情況下使用「NSMutableArray」或「NSMutableDictionary」,它們對其成員擁有強烈的引用 – 2012-08-03 15:35:25
完美。謝謝。 – 2012-08-03 15:43:25