iOS:outputStream未保持打开状态
好的,我正在实现一个输出和输入流。初始化时,流将打开并连接到我在PC上运行的TCPServer,但在初始化功能之外,一旦关闭,流可能会关闭,或者流没有正确存储。我不太确定,所以非常感谢您的帮助 在my.h文件中:iOS:outputStream未保持打开状态,ios,nsstream,nsinputstream,nsoutputstream,Ios,Nsstream,Nsinputstream,Nsoutputstream,好的,我正在实现一个输出和输入流。初始化时,流将打开并连接到我在PC上运行的TCPServer,但在初始化功能之外,一旦关闭,流可能会关闭,或者流没有正确存储。我不太确定,所以非常感谢您的帮助 在my.h文件中: @interface AVCamViewController : UIViewController <UIImagePickerControllerDelegate,UINavigationControllerDelegate, NSStreamDelegate> {
@interface AVCamViewController : UIViewController <UIImagePickerControllerDelegate,UINavigationControllerDelegate, NSStreamDelegate> {
NSOutputStream *outputStream;
NSInputStream *inputStream;
}
@property (retain) NSInputStream *inputStream;
@property (retain) NSOutputStream *outputStream;
在initNetworkConnection中,模拟器连接到我的TCPServer并打开一个连接(streamstatus=2)。接收消息“Hello from Ipad Simulator”。
但是,我通过单击按钮调用了“sendaResponse”方法,然后streamstatus=0,“outputstream”似乎没有初始化。我只是没有正确地保留变量吗 我假设您正在使用ARC。 删除此代码:
{
NSOutputStream *outputStream;
NSInputStream *inputStream;
}
@synthesize inputStream, outputStream;
这只是混淆了属性和实例变量。这样做的结果是,您直接设置了实例变量,并且您的流实例被ARC释放
相反,一旦删除了上面的代码,请使用self.inputStream
和self.outputStream
访问流。这将允许属性正常工作,并确保您配置的“保留”规范得到遵守
您的原始代码也可能只是没有尝试设置属性。。。
您的配置应为:
NSInputStream *inputStream = (NSInputStream *) readStream;
NSOutputStream *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];
self.inputStream = inputStream;
self.outputStream = outputStream;
然后将属性更改为:
@property (strong) NSInputStream *inputStream;
@property (strong) NSOutputStream *outputStream;
我假设你用的是ARC。 删除此代码:
{
NSOutputStream *outputStream;
NSInputStream *inputStream;
}
@synthesize inputStream, outputStream;
这只是混淆了属性和实例变量。这样做的结果是,您直接设置了实例变量,并且您的流实例被ARC释放
相反,一旦删除了上面的代码,请使用self.inputStream
和self.outputStream
访问流。这将允许属性正常工作,并确保您配置的“保留”规范得到遵守
您的原始代码也可能只是没有尝试设置属性。。。
您的配置应为:
NSInputStream *inputStream = (NSInputStream *) readStream;
NSOutputStream *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];
self.inputStream = inputStream;
self.outputStream = outputStream;
然后将属性更改为:
@property (strong) NSInputStream *inputStream;
@property (strong) NSOutputStream *outputStream;
谢谢,非常感谢您的快速回复!谢谢,非常感谢您的快速回复!