-1

我有这个功能来检查来自 udp 连接的数据

- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag 
{    
 NSString *response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSString *hello = @"hello";
if(response == hello){
    [self debugPrint:[NSString stringWithFormat:@"ok"]];
}
else{
    [self debugPrint:[NSString stringWithFormat:@"Read:  \n%@",response]];
}

    [response release];

}

我发送了一个“hello”,但它从不返回“ok”消息,它跳转到 else{}

任何人都可以帮忙吗?谢谢

4

3 回答 3

1

为了进行比较,您必须使用 isEqualToString 函数:

NSString * str = @"oranges";
BOOL res = [str isEqualToString:@"apples"];
于 2013-03-29T11:37:55.320 回答
0

这行代码 if(response == hello) 应该是 if([response isEqualToString:hello]) 因为 "==" 比较对象 "response" 和对象 "hello" 的地址

于 2013-03-29T11:35:44.023 回答
0

"isEqualToString:" 是一个方法,它接受一个指向 NSString 对象的指针 ("aString") 并将它与调用它的 NSString 对象进行比较。

if ([thing1 isEqualToString: thing2])

这里“thing1”是一个指向 NSString 对象的指针,我们使用它的成员方法“isEqualToString:”来与 NSString 对象“thing2”进行比较。

所以“thing1”不是一个参数,而是一个对象,它有一个名为“isEqualToString:”的成员方法(或者更简单的函数)

- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag 
{    
   NSString *response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
  NSString *hello = @"hello";
// check like this
  if(response isEqualToString:hello){
    [self debugPrint:[NSString stringWithFormat:@"ok"]];
    }
  else{
    [self debugPrint:[NSString stringWithFormat:@"Read:  \n%@",response]];
    }

    [response release];

}
于 2013-03-29T11:53:10.443 回答