2011-08-18 70 views
3

我正在使用ARC(不,這不是NDA)。使用ARC時ASIHTTPRequest異步請求會導致EXC_BAD_ACCESS

我有一個TableView,並在委託調用didSelectRowAtIndexPath方法我創建一個新的對象,UIViewController的子類。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; 

    NSDictionary *currentDict = [tableData objectAtIndex:indexPath.row]; 
    int articleID = [[currentDict objectForKey:@"id"] intValue]; 

    ArticleView *articleView = [[ArticleView alloc]initWithArticleID:articleID]; 
    articleView.delegate = self; 
    articleView.hidesBottomBarWhenPushed=YES; 
    [self.navigationController pushViewController:articleView animated:YES] 
} 

在對象什麼是在NavigationController的頂部我試圖做一個ASIHTTPRequest異步。請求開始後,我收到一個EXC_BAD_ACCESS。

- (void)viewDidLoad { 
    [super viewDidLoad];  
    ASIFormDataRequest *request2 = [[ASIFormDataRequest alloc]initWithURL:[NSURL URLWithString:@"http://api.b....."]]; 
    request2.delegate = self; 
    [request2 setUserInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:articleID],@"article",nil]]; 
    [request2 addPostValue:@"getArticle" forKey:@"action"]; 
    [request2 addPostValue:[NSNumber numberWithInt:articleID] forKey:@"id"]; 
    [request2 startAsynchronous]; 
} 

後,我稱之爲「startAsynchronous」的方法,在NetworkActivity指示燈在狀態欄出現,但後來我得到一個EXC_BAD_ACCESS。如果我刪除線

request2.delegate = self; 

它的工作原理,但我需要請求的結果!

我試圖創建與__strong請求,沒有成功:

ASIFormDataRequest __strong *request2 = [[ASIFormDataRequest alloc]initWithURL:[NSURL URLWithString:@"http://api.b....."]]; 

的ASIFormDataRequest類都很好,因爲從那裏我分配的異步請求正常工作的ArticleViewController與TableView中父視圖控制器。

+0

嘗試使用此代替:[request setDelegate:self];另外,如果您在視圖中顯示內容,則只需「加載」即可同時執行此操作,或者可以檢測異步完成並刷新視圖。 –

+2

您可能需要添加伊娃來引用請求並將其保存在內存中。然而,我不確定爲什麼它會工作,如果你不設置委託。 – jtbandes

+0

使用此操作:[request setDelegate:self]也失敗。正因爲如此,我需要委託來檢查請求何時完成。相反,我顯示一個加載視圖,所以我的TabBar應用程序的其他選項卡可以在加載請求時訪問。但是,必須有辦法讓異步請求起作用嗎? – brokedid

回答

1

我解決了這個問題,我爲ArticleView做了一個ivar,所以viewController沒有被釋放,委託可以發送一些東西。

@property(strong) ArticleView *articleView;

謝謝您的幫助!