asyncSocket writeData аварийно завершает работу с другими NSData - PullRequest
1 голос
/ 01 июля 2011

Если я использую это для настройки 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 ]

1 голос
/ 03 июля 2011

NSString и NSDate не были настроены с alloc и init, поэтому они исчезли, когда добрались до записи данных. Я изменил NSDate для размещения и инициализации, и теперь все работает хорошо. Эта идея пришла от нескольких людей, которые ответили на это. спасибо за помощь!

0 голосов
/ 24 ноября 2011

Я знаю, что это немного поздно, но я подумал, что было бы хорошо узнать, почему это работает - когда вы вызываете метод writeData с вашим буфером данных, асинхронный код создает новый объект путем создания подкласса 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
0 голосов
/ 02 июля 2011

Последний завершается нулем, первый - нет.Это, вероятно, проблема.

...