我对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];
}
}