使用ARC时,didSelectRowAtIndexPath中的EXC_BAD_ACCESS

时间:2011-11-09 18:13:28

标签: objective-c memory-management ios5 automatic-ref-counting cfnetwork

我对CFNetwork有疑问。 我第一次将CFReadStream安排到当前的runloop并获取了FTP服务器的目录列表,它运行正常。 在UITableView中表示目录列表之后,在didSelectRowAtIndexPath中,我更改URL以显示所选目录的内容。 我用这个新URL创建了一个新流。 当我尝试使用CFReadStreamOpen打开它时(不将其安排到当前的runloop中),我得到一个EXC_BAD_ACCESS。 我用NSZombieEnabled检查了僵尸并没有找到任何僵尸。 有什么想法吗?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell=[tableView cellForRowAtIndexPath:indexPath];
    NSString *newAdr=[[NSString alloc]initWithFormat:@"%@/%@",self.addressString,cell.textLabel.text];
    self.addressString=newAdr;
    self.url=[NSURL URLWithString:self.addressString];

    CFURLRef newFtpURL=(__bridge_retained CFURLRef)self.url;
    CFReadStreamRef newStream=CFReadStreamCreateWithFTPURL(NULL, newFtpURL);

    MyStreamInfo streamInformation;
    streamInformation.readStream=newStream;

    CFStreamClientContext clientContext={1,&streamInformation,NULL,NULL,NULL};
    CFOptionFlags events= kCFStreamEventHasBytesAvailable | kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered;
    BOOL flagOpen=CFReadStreamSetClient(streamInformation.readStream, events, (void*)didStartReceiveList, &clientContext);

    if(!CFReadStreamOpen(streamInformation.readStream)){
        NSLog(@"Could not open read stream");

    }
    else {
        [self readStreamData:newStream :&clientContext];
    }
}

0 个答案:

没有答案