Ошибка при сравнении NSString, сгенерированного из NSUTF8StringEncoding

Я использую свое приложение для получения данных с помощью этого метода:

-(void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data
fromAddress:(NSData *)address withFilterContext:(id)filterContext {
  NSLog(@"didReceiveData");
  NSString* input = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
  NSLog(@"%@", input);
  if ([input isEqual:@"LEDCube"]) {
        //do something
    }

Несмотря на то, что я отправляю «LEDCube», оператор if всегда возвращает 0, что делает меня неспособным идти дальше.

Из NSLog содержимое ввода — «LEDCube». Поэтому я подозреваю, что проблема в NSUTF8StringEncoding. Как справиться с этой проблемой?

заранее спасибо


person Ghifari Rahadian    schedule 11.03.2016    source источник
comment
Я думаю, что ваша сеть в корне нарушена, поскольку вы предполагаете, что данные будут доставлены в тех же фрагментах, которые вы их отправили. Это не так, и вам нужно создать пакет на уровне приложения и собирать данные до тех пор, пока не будет получен полный пакет, и только затем начинать его синтаксический анализ. Обычно это означает отправку значения packet size, за которым следует полезная нагрузка.   -  person trojanfoe    schedule 11.03.2016
comment
о интересно. В другой моей программе я использую sendto() из winsock в windows. Значит, мне нужно отправить дополнительную информацию из моей другой программы?   -  person Ghifari Rahadian    schedule 11.03.2016
comment
да. Он будет работать нормально в большинстве случаев, но не каждый раз.   -  person trojanfoe    schedule 11.03.2016
comment
didReceiveData часто вызывается несколько раз, поскольку ваши данные поступают по крупицам. Вы можете получить один didReceiveData с символами LEDC, за которым следует другой, содержащий ube. Логируйте вывод данных для начала.   -  person gnasher729    schedule 11.03.2016


Ответы (1)


используйте isEqualToString вместо isEqual

if ([input isEqualToString:@"LEDCube"]) {
    //do something
}
person S Patel    schedule 11.03.2016
comment
Нет никакой разницы. - person trojanfoe; 11.03.2016