代码之家  ›  专栏  ›  技术社区  ›  MusiGenesis

写入从NSNetService对象获取的NSOutputStream时应用程序崩溃

  •  0
  • MusiGenesis  · 技术社区  · 14 年前

    我正在努力理解和修改WiTap示例iPhone应用程序(运行良好)。在我对代码的修改中,我能够让两个设备相互定位并解析NSNetService对象,然后在这些对象上调用 getInputStream:outputStream 创建 NSInputStream 还有一个 NSOutputStream 对象。

    问题是当我试图使用 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()

    1 0x357a7426 in\uU CFSocketManager()

    2 0x33c14684 in_pthread_start()

    3 0x33c06014 in线程启动()

    螺纹3(螺纹12803):

    0 0x33b89e70在mach_msg_陷阱中()

    1 0x33b8c35c,机器消息()

    \u CFRunLoopServiceMachPort()中的2 0x3576e7ee

    CFRunLoopRunSpecific()中的4 0x3576dd7a

    CFRunLoopRunInMode下的5 0x3576dc88()

    7 0x33c14684 in_pthread_start()

    8 0x33c06014线程开始()

    螺纹2(螺纹12291):

    kevent中的0 0x33bbe34c()

    调度管理器invoke()中的1 0x33c8c770

    _dispatch_queue_invoke()中的2 0x33c8c1bc

    3 0x33c8c35c in _dispatch_worker_thread2()

    4 0x33c14c40 in_pthread_wqthread()

    起始线程()中的5 0x33c0bb6c

    objc_msgSend()中的0 0x35107420

    1 0x35750c74 in CFRelease()

    2个0x35750162 in_CFAutoreleasePoolPop()

    3 0x3093e664 in-[NSAutoreleasePool release]()

    4 0x31969130 in\u UIApplicationHandleEvent()

    5 0x336adde0紫色EventCallback()

    6 0x3577be46英寸 CFRUNLOOP_是_调用_OUT_以执行源1_PERFORM_函数 ()

    7 0x3577be04在\u CFRunLoopDoSource1()

    8 0x3576e0a4,在\uu CFRunLoopRun()中

    CFRunLoopRunSpecific()中的9 0x3576dd7a

    CFRunLoopRunInMode下的10 0x3576dc88()

    GSEventRunModal()中的11 0x336ace8c

    12 0x318f0f94输入-[UIApplication\u运行]()

    UIApplicationMain()中的13 0x318ee4d4

    main中的14 0x00002444(argc=1,argv=0x2fff5c0),地址为/Users/kenadams/Documents/WalkyTalkyX/main.m:14

    1 回复  |  直到 4 年前
        1
  •  1
  •   Community CDub    7 年前

    移除 [data release]; data 作为自动释放的对象,所以不应该释放它。

    数据 只要 outStream 正在发送数据。什么时候? 数据 释放时,其字节数组也将消失。

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