当前位置:  开发笔记 > 运维 > 正文

iPhone SDK - NSStreamEventHasBytesAvailable/appendBytes:崩溃

如何解决《iPhoneSDK-NSStreamEventHasBytesAvailable/appendBytes:崩溃》经验,为你挑选了2个好方法。

免责声明:我是Xcode/iPhone SDK Noob.

我正在尝试建立与现有服务器的客户端TCP/IP连接.连接后,我希望收到一些有关服务器的数据(版本等).

当我建立连接时,NSStreamEventOpenCompleted事件将触发,因此我知道已建立连接.接下来NSStreamEventHasBytesAvailable事件触发,我正在执行以下代码.值71(int)存储在len中,我认为这是正确的.但是,行

[data appendBytes:&buffer length:len];

正在崩溃(我想).没有抛出实际错误但我确实看到 __TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION__即使我已明确添加错误捕获:

case NSStreamEventHasBytesAvailable:
    {
        NSMutableData *data=[[NSMutableData alloc] init];

        uint8_t *buffer[1024];
        unsigned int len=0;

        len=[(NSInputStream *)stream  read:buffer maxLength:1024];
        if(len>0){  
            @try{
                [data appendBytes:&buffer length:len];
            }
            @catch(NSException *ex){
                NSLog(@"Fail: %@", ex); 
            }
            [statusLabel setText:[data stringValue]];
            //[bytesRead setIntValue:[bytesRead intValue]+len];
        }else{
            NSLog(@"No Buffer");
        }
        break ;
    }

Jim Puls.. 10

这是C级的一个问题:你对缓冲区和指针感到困惑.

这段代码:

uint8_t *buffer[1024];

给你一个1024指针的堆栈缓冲区uint8_t,这几乎肯定不是你想要的.代替:

uint8_t buffer[1024];

稍后,您将堆栈上指针的地址传递给 - [NSMutableData appendBytes:length:],这也不是您想要的:在文档中,传递第一个元素:

[data appendBytes:buffer length:len];

有一个非常全面的编程指南,其中包含您正在尝试执行的完整代码,您可能需要参考它.

至于__TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION__内存损坏和错误的指针解除引用不是你可以用Objective-C @try/ 捕获的东西@catch; 它的水平要低得多.另一方面,如果打开调试,您仍然可以在调试器中捕获它.



1> Jim Puls..:

这是C级的一个问题:你对缓冲区和指针感到困惑.

这段代码:

uint8_t *buffer[1024];

给你一个1024指针的堆栈缓冲区uint8_t,这几乎肯定不是你想要的.代替:

uint8_t buffer[1024];

稍后,您将堆栈上指针的地址传递给 - [NSMutableData appendBytes:length:],这也不是您想要的:在文档中,传递第一个元素:

[data appendBytes:buffer length:len];

有一个非常全面的编程指南,其中包含您正在尝试执行的完整代码,您可能需要参考它.

至于__TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION__内存损坏和错误的指针解除引用不是你可以用Objective-C @try/ 捕获的东西@catch; 它的水平要低得多.另一方面,如果打开调试,您仍然可以在调试器中捕获它.



2> Christopher ..:

将缓冲区声明为:

uint8_t buffer[1024];

并附加为:

[data appendBytes:buffer length:len];

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有