2011-08-18 69 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;

谢谢您的帮助!