2016-11-29 2 views
0

Я использую запрос Parse OR для поиска совпадений пользователей на основе регулярных выражений и электронных писем внутри массива. Регулярное выражение может быть довольно длинным, поскольку я генерирую его из имен в адресной книге пользователя. Мой код ниже:Запрос Parse или Regex дает ошибку Geoquery

PFQuery *emailQuery = [WPUser query]; 
    [emailQuery whereKey:@"email" containedIn:emails]; 

    PFQuery *nameQuery = [WPUser query]; 
    [nameQuery whereKey:@"name" matchesRegex:regex modifiers:@"i"]; 

    PFQuery *query = [PFQuery orQueryWithSubqueries:@[emailQuery, nameQuery]]; 
    [query whereKey:@"objectId" notEqualTo:[WPUser currentUser].objectId]; 
    [query whereKeyExists:@"signedUp"]; 
    [query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) { 
     self.registeredContacts = objects; 
     BLOCK_ON_MAINTHREAD() 
    }]; 

Формат регулярного выражения (^First.*Last$)|(^First.*Last$) и т.д. для каждого имени в адресной книге. Я использую модификатор i, чтобы сделать его регистрозависимым.

Тем не менее, я получаю странную ошибку с этим запросом, и она, похоже, только началась недавно: [Error]: geo query within or is not supported (Code: 102, Version: 1.14.2). Я не добавляю никаких геоинформаций к этому запросу, как вы можете видеть. Если мое регулярное выражение каким-то образом заставляет Parse добавлять геокрию? Если я прокомментирую строку matchesRegex:modifiers:, тогда запрос вернется как обычно ... однако я, очевидно, теряю функциональность, в которой я нуждаюсь.

У меня нет символов или чего-либо еще, поскольку я также проверяю имена с помощью NSCharacterSet.

NSMutableCharacterSet *validCharacters = [NSMutableCharacterSet letterCharacterSet]; 
[validCharacters formUnionWithCharacterSet:[NSCharacterSet whitespaceCharacterSet]]; 

Почему Parse дает мне ошибку, которая не имеет отношения к моему фактическому запросу? Если это связано с моим регулярным выражением, любые идеи по его устранению?

ответ

0

У меня есть несколько китайских имен в моей адресной книге, и по какой-то причине эти имена вызывают ошибку. Я добавил строку в проверку моего регулярного выражения, чтобы пропустить эти имена, и ошибка исчезла.

Для справки я добавил BOOL чек:

BOOL isLatin = [regexName canBeConvertedToEncoding:NSISOLatin1StringEncoding];