Я следовал руководству Настройка потоков сокетов и эффективно продублировал этот код в своем классе. Независимо от того, что я пробую, методы делегата, похоже, просто не вызываются.
В заголовочном файле у меня есть (в основном):
@interface myClass : NSObject {
NSInputStream *inputStream;
NSOutputStream *outputStream;
}
- (void)connect;
@end;
Метод подключения:
- (void)connect {
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef)@"host.example.com", 1234, &readStream, &writeStream);
inputStream = (NSInputStream *)readStream;
outputStream = (NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
}
Также пробовал использовать CFStreamCreatePairWithSocketToCFHost ()
и [NSStream getStreamsToHost: port: inputStream: outputStream:
- все с точно таким же результатом.
Я установил точку останова в начале метода connect
,
...
У меня возникла проблема с дизайном при отправке значения индикатора выполнения из класса, вызываемого из класса Thread in Activity, для обновления графического интерфейса пользователя, как показано ниже
[Фрагмент кода не компилируется только для объяснения]:
Class A : Extend Activity {
new Thread(new Runnable()
{
public void run()
{
B objB = new B();
objB.DownloadFile();
}
}).start();
}
Class B {
public void DownloadFile()
{
... some work [preparing SOAP request]
while(response.read())
{
//send calculated progress to Class A to update the progress value
}
}
}
Любая помощь или руководство будут очень благодарны