ASIHTTPRequest вызывает асинхронный запрос EXC_BAD_ACCESS при использовании ARC - PullRequest
3 голосов
/ 18 августа 2011

Я использую ARC (нет, это не NDA).

У меня есть 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]
}

В Object, который находится на вершине 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, асинхронный запрос работает нормально.

1 Ответ

1 голос
/ 18 января 2013

Я решил, я сделал ivar для ArticleView, чтобы viewController не выпускался и делегат мог что-то отправить.

@property(strong) ArticleView *articleView;

Спасибо за помощь!

...