使用ARC时,ASIHTTPRequest异步请求会导致EXC_BAD_ACCESS

时间:2011-08-18 16:55:32

标签: iphone objective-c xcode asiformdatarequest

我正在使用ARC(不,这不是NDA)。

我有一个TableView,并且在从Delegate调用的didSelectRowAtIndexPath方法中,我创建了一个新的Object,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类很好,因为在父视图控制器上使用TableView,我从那里分配了ArticleViewController,异步请求工作正常。

1 个答案:

答案 0 :(得分:1)

我解决了它,我为ArticleView做了一个ivar,所以viewController没有被释放,委托可以发送一些东西。

@property(strong) ArticleView *articleView;

感谢您的帮助!