0

在下面的代碼片段中,使用ARC,我如何讓委託生存足夠長的時間來調用這兩個方法?如何讓ARC保留一個足夠長的委託讓它在塊中調用?

現在我得到一個編譯錯誤

壞接收器類型「__autoreleasing標識*」

我想我需要做一些事情,使ARC保留委託,並釋放它,當它完成呼叫但不知道做正確的事情是什麼。

- (BOOL) requestFromURL:(NSString*)url withDelegate:(id<SimpleDataDelegate>*) delegate 
{ 
    [NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://..."]] 
             queue:[NSOperationQueue mainQueue] 
          completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
    { 
     if (error) 
     { 
      [delegate gotFailure:data]; 
     } 
     else 
     { 
      [delegate gotResult:data]; 
     } 
    }]; 

    return YES; 
} 

回答

7

我覺得你的方法簽名可能應該是

- (BOOL) requestFromURL:(NSString*)url withDelegate:(id<SimpleDataDelegate>) delegate 

,而不是

- (BOOL) requestFromURL:(NSString*)url withDelegate:(id<SimpleDataDelegate>*) delegate 

公告中的第一個缺少*,在第二個參數。試試看,看看錯誤是否消失。如果不是,請回報。

+0

堵嘴,什麼是褐紅色。當然id *會讓ARC感到困惑。感謝您指出我的方式錯誤!第一個顯然是我的意思。顯然這個問題是一個錯誤的類型o。 – ahwulf

+0

ARC對此並不感到困惑。弧可以和確實處理id *絕對好。但似乎(1)在這種情況下是錯誤的,(2)對你感到困惑。 – gnasher729

相關問題