写入NSOutputStream时,应用程序崩溃来自NSNetService对象

时间:2010-10-22 18:12:49

标签: iphone

我正在尝试理解和修改WiTap示例iPhone应用程序(工作正常)。在我对代码的修改中,我能够让两个设备相互定位并解析NSNetService对象,然后我在其上调用getInputStream:outputStream来创建NSInputStreamNSOutputStream对象

问题在于,当我尝试使用NSOutputStream从一个设备向另一个设备发送内容时,即使接收应用程序成功获取消息并显示UIAlert,发送应用程序也会立即崩溃。

以下是我用来发送的代码:

NSString *str = [[NSString alloc] initWithString:@"teststring7"];
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
[str release];
[outStream write:[data bytes] maxLength:[data length]];
[data release];

我已经玩过释放或不释放或保留或不保留这些不同对象的所有可能组合,似乎没有任何工作 - 发送应用程序每次都崩溃。

我从原始示例中做出的一项更改是使我的应用委托的流属性如此:

@property (nonatomic, retain) NSInputStream *inStream;
@property (nonatomic, retain) NSOutputStream *outStream;

这可能是我的应用崩溃的原因吗?

我尝试在try / catch块中包装发送代码,但这并不能防止崩溃。

更新:这是回溯(对于字体丑闻感到抱歉 - 我认为这是来自每行前面的英镑符号):

线程4(线程13059):

选择$ DARWIN_EXTSN()中的

0 0x33bb32e4 __CFSocketManager()

中的

1 0x357a7426 _pthread_start()

中的

2 0x33c14684 thread_start()

中的

3 0x33c06014

线程3(线程12803):

mach_msg_trap()

中的

0 0x33b89e70 在mach_msg()

1 0x33b8c35c __CFRunLoopServiceMachPort()

中的

2 0x3576e7ee __CFRunLoopRun()

中的

3 0x3576dff6 CFRunLoopRunSpecific()

中的

4 0x3576dd7a CFRunLoopRunInMode()中的

5 0x3576dc88

运行WebThread()中的

6 0x34177ef0 _pthread_start()

中的

7 0x33c14684 thread_start()

中的

8 0x33c06014

线程2(线程12291):

kevent()

中的

0 0x33bbe34c _dispatch_mgr_invoke()

中的

1 0x33c8c770 _dispatch_queue_invoke()

中的

2 0x33c8c1bc _dispatch_worker_thread2()

中的

3 0x33c8c35c _pthread_wqthread()

中的

4 0x33c14c40 start_wqthread()

中的

5 0x33c0bb6c

线程1(线程11523):

objc_msgSend()

中的

0 0x35107420 在CFRelease()

1 0x35750c74 _CFAutoreleasePoolPop()

中的

2 0x35750162

3 0x3093e664 in - [NSAutoreleasePool release]()

_UIApplicationHandleEvent()中的

4 0x31969130 PurpleEventCallback()

中的

5 0x336adde0 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION ()

中的

6 0x3577be46 __CFRunLoopDoSource1()

中的

7 0x3577be04 __CFRunLoopRun()

中的

8 0x3576e0a4 CFRunLoopRunSpecific()

中的

9 0x3576dd7a CFRunLoopRunInMode()中的

10 0x3576dc88

11 0x336ace8c在GSEventRunModal()

12 0x318f0f94 in - [UIApplication _run]()

UIApplicationMain()

中的13 0x318ee4d4 主要的

14 0x00002444(argc = 1,argv = 0x2ffff5c0)/Users/kenadams/Documents/WalkyTalkyX/main.m:14

1 个答案:

答案 0 :(得分:1)

删除[data release];,您正在创建data作为自动释放的对象,因此您不应该将其释放。

从stacktrace我想问题是字节数​​组已经消失 - 只要data发送数据,你就不应该释放outStream。释放data时,其字节数组也将消失。

如果没有用,请在此处阅读我关于调试此类问题的答案:UITextView delegates problem