isEqualToString 总是 returns False
isEqualToString always returns False
在我开始之前这里有一些背景知识,基本上我们正在寻找将 UDP 响应与存储在我们应用程序的 Parse 数据库中的字符串进行比较。这个问题是我似乎无法让 isEqualToString 函数将字符串视为相等。这是我现在 运行 的代码,我已经尝试了一些我在其他问题中看到的解决方法,但它仍然不起作用。
- (BOOL) onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port
{
if(tag == TAG_SINGLE_GRILL)
{
NSString *grillId = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if(grillId.length > 11)
{
grillId = [grillId substringToIndex:11];
}
grillId = [NSString stringWithFormat:@"%@", grillId];
if([grillId hasPrefix:@"GMG"])
{
for(int i = 0; i < [parseGrills count]; i++)
{
NSString *parseGrillId = [[parseGrills objectAtIndex:i] grillId];
parseGrillId = [NSString stringWithFormat:@"%@", parseGrillId];
//If we match the id, add it to found grills
if([grillId isEqualToString:parseGrillId])
{
//do stuff
}
}
}
NSLog(@"Grill ID : %@", grillId);
}
return TRUE;
}
parseGrills 是一个带有非常基本的 Grill 对象的 NSMutableArray,我使用 synthesize 作为属性,否则 .m 文件基本上是空的。
#import <Foundation/Foundation.h>
@interface Grill : NSObject
@property (nonatomic) NSString* grillId;
@property (nonatomic) NSString* ipAddress;
@end
这是调试器之后的屏幕截图 returns false
任何帮助将不胜感激。谢谢
我猜他们是不同的编码。
我有 运行 这个实验,发现如果编码不同,它会 return NO
。因此,请尝试使用以下代码将 parseGrillId
转换为 utf8
。
NSString *s1 = [NSString stringWithCString:"HELLO123" encoding:NSUTF8StringEncoding];
NSString *s2 = [NSString stringWithCString:"HELLO123" encoding:NSUTF16StringEncoding];
NSString *s3 = [NSString stringWithUTF8String:s2.UTF8String];
if ([s1 isEqualToString:s2]) {
NSLog(@"s1 == s2");
}
if ([s1 isEqualToString:s3]) {
NSLog(@"s1 == s3");
}
将打印 s1 == s3
.
在我开始之前这里有一些背景知识,基本上我们正在寻找将 UDP 响应与存储在我们应用程序的 Parse 数据库中的字符串进行比较。这个问题是我似乎无法让 isEqualToString 函数将字符串视为相等。这是我现在 运行 的代码,我已经尝试了一些我在其他问题中看到的解决方法,但它仍然不起作用。
- (BOOL) onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port
{
if(tag == TAG_SINGLE_GRILL)
{
NSString *grillId = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if(grillId.length > 11)
{
grillId = [grillId substringToIndex:11];
}
grillId = [NSString stringWithFormat:@"%@", grillId];
if([grillId hasPrefix:@"GMG"])
{
for(int i = 0; i < [parseGrills count]; i++)
{
NSString *parseGrillId = [[parseGrills objectAtIndex:i] grillId];
parseGrillId = [NSString stringWithFormat:@"%@", parseGrillId];
//If we match the id, add it to found grills
if([grillId isEqualToString:parseGrillId])
{
//do stuff
}
}
}
NSLog(@"Grill ID : %@", grillId);
}
return TRUE;
}
parseGrills 是一个带有非常基本的 Grill 对象的 NSMutableArray,我使用 synthesize 作为属性,否则 .m 文件基本上是空的。
#import <Foundation/Foundation.h>
@interface Grill : NSObject
@property (nonatomic) NSString* grillId;
@property (nonatomic) NSString* ipAddress;
@end
这是调试器之后的屏幕截图 returns false
我猜他们是不同的编码。
我有 运行 这个实验,发现如果编码不同,它会 return NO
。因此,请尝试使用以下代码将 parseGrillId
转换为 utf8
。
NSString *s1 = [NSString stringWithCString:"HELLO123" encoding:NSUTF8StringEncoding];
NSString *s2 = [NSString stringWithCString:"HELLO123" encoding:NSUTF16StringEncoding];
NSString *s3 = [NSString stringWithUTF8String:s2.UTF8String];
if ([s1 isEqualToString:s2]) {
NSLog(@"s1 == s2");
}
if ([s1 isEqualToString:s3]) {
NSLog(@"s1 == s3");
}
将打印 s1 == s3
.