Анализ iOS: NSInvalidArgumentException», причина: «Невозможно выполнить запрос сравнения для типа: (null)

мое приложение, основанное на бэкенде Parse, завершается, если не подключено к Интернету, с ошибкой NSInvalidArgumentException», причина: «Невозможно выполнить запрос сравнения для типа: (null). Когда есть подключение к Интернету, все работает нормально, но когда я отключаюсь, через несколько секунд приложение завершается с этой ошибкой.

Вот мой код

- (void)queryParseMethod {
NSLog(@"start query");


PFQuery *query = [UserParseHelper query];
[query whereKey:@"username" notEqualTo:self.mainUser.username];
PFGeoPoint *userGeoPoint = self.mainUser.geoPoint;
[query whereKey:@"geoPoint" nearGeoPoint:userGeoPoint];

if (self.segmentedControl.selectedSegmentIndex == 0) {
    [query whereKey:@"isMale" equalTo:@"true"];

}
if (self.segmentedControl.selectedSegmentIndex== 1) {
   [query whereKey:@"isMale" equalTo:@"false"];

}


PFUser *chekUser = [PFUser currentUser];
NSString *vip = chekUser[@"membervip"];
if ([vip isEqualToString:@"vip"]) {

    NSLog(@"Unlim - vip member");
    self.upgradeVip.hidden = YES;
    self.upgradedVip.hidden = NO;

} else{

    NSLog(@"No Unlim - no vip member");
 //   query.limit = limitQueruNoVipUser;
    self.upgradeVip.hidden = NO;
    self.upgradedVip.hidden = YES;

}

[query whereKey:@"geoPoint" nearGeoPoint:self.mainUser.geoPoint withinKilometers:self.mainUser.distance.doubleValue];

person MSinga Pro    schedule 13.09.2015    source источник


Ответы (1)


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

person MatthewLuiHK    schedule 13.09.2015
comment
Я тоже об этом думал, но что произойдет, если я кеширую результат PFGeoPoint? или есть способ сделать так, чтобы приложение предупреждало об отсутствии подключения к интернету и не отключалось внезапно - person MSinga Pro; 14.09.2015
comment
Извините за мой поздний ответ. Насколько я помню, PFGeoPoint может быть создан с указанием местоположения ядра. Поэтому, если вы проверили, что сетевая служба отключена, вы можете вызвать основную службу определения местоположения и в качестве альтернативы получить текущее местоположение. После того, как вы получите CLLocation или что-то в этом роде, вы можете вручную создать экземпляр объекта PFGeoPoint и сделать все остальное. Но на самом деле вы не можете получить запрос, когда нет сети, так почему вы все еще хотите получить GeoPoint в этом случае? - person MatthewLuiHK; 01.10.2015