У меня есть строка product
:
NSString* product = models[[[peripheral identifier] UUIDString]];
и в отладчике я могу напечатать:
po product
>>> X3
и я могу проверить байты:
po [product dataUsingEncoding:NSUTF8StringEncoding]
>>> <5833>
Я также могу проверить байты буквальной строки @"X3"
:
po [@"X3" dataUsingEncoding:NSUTF8StringEncoding]
>>> <5833>
И я получаю тот же результат. Однако, когда я пытаюсь сделать:
[product isEqualToString:@"X3"]
>>> <nil>
Я получаю nil
. Какого черта!? Я могу понять, когда есть скрытый символ или что-то в этом роде, но когда байты оцениваются как одно и то же, я сбит с толку.
Я даже могу:
NSData *d = [product dataUsingEncoding:NSUTF8StringEncoding];
NSData *d2 = [@"X3" dataUsingEncoding:NSUTF8StringEncoding];
po [d isEqualToData:d2]
>>> YES
NSUTF16StringEncoding
вместоNSUTF8StringEncoding
? Мне интересно, есть ли спецификация. - person Ken Thomases   schedule 04.04.2019UUIDString
не использует UTF8, поэтому он может подумать, что они разные. См. это: stackoverflow.com/questions/28507991/ Но ясно , это странное поведение. - person Larme   schedule 09.04.2019[NSUUID initWithUUIDString:@"X3"] isEqual:models[[peripheral identifier]]]
? - person Larme   schedule 16.04.2019