asyncSocket writeData与不同的NSData崩溃

时间:2011-07-01 19:42:09

标签: iphone objective-c nsstring byte nsdata

如果我使用它来设置NSData,那么writeData方法会崩溃。

   NSString *test = @"The quick brown fox jumped over the lazy dog\r\n";
   NSData *data = [test dataUsingEncoding:NSUTF8StringEncoding];

   [asyncSocket writeData:data withTimeout:10 tag:4];

但是,如果我使用这个,那么它可以工作......但我需要NSString,所以我可以输入一个格式化的字符串来发送......

 char bytes[] = "The quick brown fox jumped over the lazy dog\r\n";
 NSData* data = [[NSData alloc] initWithBytes:bytes length:sizeof(bytes)];

 [asyncSocket writeData:data withTimeout:10 tag:4];

那我做错了什么?

3 个答案:

答案 0 :(得分:1)

NSString和NSDate没有使用alloc和init设置,所以当它们到达写入数据时它们就消失了。我将NSDate更改为alloc和init,现在一切正常。这些想法来自几个回答这个问题的人。谢谢你的帮助!

答案 1 :(得分:0)

后者是空终止,前者不是。这可能是个问题。

答案 2 :(得分:0)

我知道它有点晚了但我认为知道为什么这样做会很好 - 当你用数据缓冲区调用writeData方法时,asyncsocket代码通过使用传递的数据对NSObject - AsyncWritePacket进行子类化来创建一个新对象。然后它使用retain并获取你传递的数据缓冲区的所有权,因此你不想释放它。

@implementation AsyncWritePacket
- (id)initWithData:(NSData *)d timeout:(NSTimeInterval)t tag:(long)i
{
    if((self = [super init]))
    {
        buffer = [d retain];
        timeout = t;
        tag = i;
        bytesDone = 0;
    }
    return self;

@end