大佬教程收集整理的这篇文章主要介绍了objective-c – NSStream不发送所有数据,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我什么都不懂……感谢任何类型的援助
我附上了我的示例@L_944_11@.
- (void)_startSend { BOOL success; NSURL * url; CFWriteStreamRef ftpStream; assert(self.networkStream == nil); // don't tap receive twice in a row! assert(self.fileStream == nil); // ditto assert(self.filePath == nil); // self.filePath rappresenta il percorso del file da inviare self.attendere.hidden = falSE; // First get and check the URl. defaults = [NSUserDefaults standardUserDefaults]; NSString * Cartella_ZIP = [[defaults objectForKey:kIndirizzoIpUploadKey] StringByAppendingString:self.Nome_File_da_Inviare]; url = [[iSALEsAgentAppDelegate sharedAppDelegate] smartURLForString:Cartella_ZIP]; success = (url != nil); // If the URL is bogus,let the user kNow. Otherwise kick off the connection. if ( ! success) { self.statuslabel.text = @"Indirizzo FTP non valido!"; } else { NSLog(@"nome file %@",self.Nome_File_da_InviarE); self.filePath = [self.Cartella_Lavoro StringByAppendingPathComponent:self.Nome_File_da_Inviare]; assert(self.filePath != nil); self.fileStream = [NSInputStream inputStreamWithFileAtPath:self.filePath]; assert(self.fileStream != nil); [self.fileStream open]; // Open a CFFTPStream for the URl. ftpStream = CFWriteStreamCreateWithFTPURL(NULL,(__bridge CFURLRef) url); assert(ftpStream != @R_450_6633@ self.networkStream = (__bridge NSOutputStream *) ftpStream; success = [self.networkStream setProperty:[defaults objectForKey:kUsernameFtpKey] forKey:(id)kcfStreamPropertyFTPUserName]; assert(success); success = [self.networkStream setProperty:[defaults objectForKey:kpasswordFtpKey] forKey:(id)kcfStreamPropertyFTPpassword]; assert(success); [self.networkStream setProperty:(id)kcfBooleanfalse forKey:(NSString *)kcfStreamPropertyFTPAttemptPersistentConnection]; self.networkStream.delegate = self; [self.networkStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [self.networkStream open]; CFRelease(ftpStream); [self _sendDidStart]; } } - (void)_stopSendWithStatus:(NSString *)statusString { if (self.networkStream != nil) { [self.networkStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; self.networkStream.delegate = nil; [self.networkStream close]; self.networkStream = nil; } if (self.fileStream != nil) { [self.fileStream close]; self.fileStream = nil; } [self _sendDidStopWithStatus:statusString]; } - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { assert(aStream == self.networkStream); NSString * Stringa_byte_letti =nil; NSString * Stringa_filesize =nil; NSnumber * number = nil; self.filesize = [[[NSFileManager defaultManager] attributesOfItemAtPath:self.filePath error:nil] fileSize]; NSnumberFormatter *numberFormatter = [[NSnumberFormatter alloc] init]; [numberFormatter setnumberStyle:kcfnumberFormatterdecimalStyle]; [numberFormatter setGroupingSeparator:@"."]; switch (eventCodE) { case NSStreamEventOpenCompleted: { // Added: Finally get filesize [self _updateStatus:@"Aperta Connessione"]; filesize = 0; byte_scritti = 0; } break; case NSStreamEventHasBytesAvailable: { [self _stopSendWithStatus:@"Network write error"]; assert(NO); // should never happen for the output stream } break; case NSStreamEventHasSpaceAvailable: { [self _updateStatus:@"Invio Ordine..."]; if (self.bufferOffset == self.bufferLimit) { NSInteger bytesRead; bytesRead = [self.fileStream read:self.buffer maxLength:kSendBufferSize]; if (bytesRead == -1) { [self _stopSendWithStatus:@"File read error"]; } else if (bytesRead == 0) { sleep(3); [self _stopSendWithStatus:nil]; } else { self.bufferOffset = 0; self.bufferLimit = bytesRead; } } // If we're not out of data completely,send the next chunk. if (self.bufferOffset != self.bufferLimit) { NSInteger bytesWritten; bytesWritten = [self.networkStream write:&self.buffer[self.bufferOffset] maxLength:self.bufferLimit - self.bufferOffset]; assert(bytesWritten != 0); byte_scritti += bytesWritten; if (bytesWritten == -1) { [self _stopSendWithStatus:@"Network write error"]; } else { self.bufferOffset += bytesWritten; } } number = [NSnumber numberWithDouble:byte_scritti]; Stringa_byte_letti = [numberFormatter StringForObjectValue:number]; number = [NSnumber numberWithInteger:self.filesize]; Stringa_filesize = [numberFormatter StringForObjectValue:number]; [self _updateStatus:[NSString StringWithFormat:@"Invio File nr. %i di %i: @R_575_10586@le byte %@ - byte scritti : %@",[self.numero_file_da_inviarE intValue]+1,[Array_FileZip count],Stringa_filesize,Stringa_byte_letti ]]; // Pull some data off the network. NSnumber * percentuale_progress = [NSnumber numberWithFloat: (float)byte_scritti / (float)self.filesize]; [self performSELEctorOnMainThread:@SELEctor(Aggiorna_ProgressBar:) withObject:percentuale_progress waitUntilDone:YES]; } break; case NSStreamEventErrorOccurred: { [self _stopSendWithStatus:@"File Dati non trovato!"]; } break; case NSStreamEventEndEncountered: { // evento ignorato } break; default: { [self _stopSendWithStatus:@"Network write error"]; assert(NO); } break; } }
以上是大佬教程为你收集整理的objective-c – NSStream不发送所有数据全部内容,希望文章能够帮你解决objective-c – NSStream不发送所有数据所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。