繁体   English   中英

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

[英]App crashing when writing to NSOutputStream gotten from NSNetService object

我正在尝试理解和修改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):

0 0x33bb32e4在select $ DARWIN_EXTSN()中

__CFSocketManager中的1 0x357a7426()

_pthread_start中的2 0x33c14684()

3 0x33c06014在thread_start()中

线程3(线程12803):

0 0x33b89e70在mach_msg_trap()中

1 0x33b8c35c在mach_msg()

__CFRunLoopServiceMachPort中的2 0x3576e7ee()

__CFRunLoopRun中的3 0x3576dff6()

CFRunLoopRunSpecific()中的4 0x3576dd7a

5 0x3576dc88在CFRunLoopRunInMode()

RunWebThread中的6 0x34177ef0()

_pthread_start中的7 0x33c14684()

8 0x33c06014在thread_start()中

线程2(线程12291):

0 0x33bbe34c in kevent()

_dispatch_mgr_invoke中的1 0x33c8c770()

_dispatch_queue_invoke中的2 0x33c8c1bc()

_dispatch_worker_thread2中的3 0x33c8c35c()

_pthread_wqthread中的4 0x33c14c40()

5 0x33c0bb6c在start_wqthread()中

线程1(线程11523):

objc_msgSend中的0 0x35107420()

1 0x35750c74 in CFRelease()

_CFAutoreleasePoolPop()中的2 0x35750162

-[NSAutoreleasePool版本]中的3 0x3093e664()

_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()

GSEventRunModal中的11 0x336ace8c()

12 0x318f0f94 in-[UIApplication _run]()

UIApplicationMain中的13 0x318ee4d4()

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

删除[data release]; ,您正在将data创建为自动发布的对象,因此您不应发布它。

从stacktrace我猜问题是字节数​​组不见了-只要outStream正在发送data ,您可能根本不应该释放数据。 释放data ,其字节数组也将消失。

如果没有帮助,请在此处阅读有关调试此类问题的答案: UITextView代表问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM