Фильтрация предикатов Core-Data для чисел с плавающей точкой - PullRequest
0 голосов
/ 03 августа 2011

По сути, у меня есть база данных местоположений для MKMapView, и когда нажимается кнопка раскрытия подробностей на каждой аннотации, появляется дополнительная информация о местоположении, например их веб-сайт и номер телефона.

Проблема в том, что в моей базе данных некоторые координаты имеют только 4 или 5 десятичных знаков вместо 6, поэтому при нажатии кнопки приложение вылетает.Чтобы остановить это, я добавил в UIAlertView, чтобы сказать: «Мы не можем найти больше информации». Есть ли способ лучше использовать мой предикат?

NSString *lat = [NSString stringWithFormat:@"%.6f", view.annotation.coordinate.latitude];
NSString *lon = [NSString stringWithFormat:@"%.6f", view.annotation.coordinate.longitude];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Stores" inManagedObjectContext:_managedObjectContext];
[request setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Latitude == %@ && Longitude == %@", lat, lon];
[request setPredicate:predicate];

NSError *error = nil;
NSArray *stores = [_managedObjectContext executeFetchRequest:request error:&error];
[request release];
if (![stores count]) {
    UIAlertView *alert = [[[UIAlertView alloc]initWithTitle:@"Error" message:@"Sorry, we are unable to locate more information for this location." delegate:nil cancelButtonTitle:@"Okay" otherButtonTitles: nil]autorelease];
    [alert show];
 } else {



    Stores *currentStore = [stores objectAtIndex:0];
    NSLog(@"current store %@", currentStore);

    AddressAnnotation *annotation = view.annotation;

    MoreInfoTable *moreInfoView = [[MoreInfoTable alloc] initWithStyle:UITableViewStyleGrouped];
    moreInfoView.currentStore = currentStore;
    moreInfoView.managedObjectContext = self.managedObjectContext;
    moreInfoView.title = annotation.title ;
    moreInfoView.getWebsite =[NSURL URLWithString:annotation.website];
    moreInfoView.getDirections = [NSURL URLWithString:[NSString stringWithFormat:@"http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f", mapView.userLocation.coordinate.latitude, mapView.userLocation.coordinate.longitude, annotation.coordinate.latitude, annotation.coordinate.longitude]];
    moreInfoView.footer = [NSString stringWithFormat:@"%.1f miles away", annotation.distanceFromLocation];
    moreInfoView.address = annotation.address;
    moreInfoView.getPhoneNumber = [NSMutableString stringWithString:annotation.phoneNumber];
    moreInfoView.lat = view.annotation.coordinate.latitude;
    moreInfoView.lon = view.annotation.coordinate.longitude;

    [self.navigationController pushViewController:moreInfoView animated:YES];
    [moreInfoView release]; 

}

}

1 Ответ

1 голос
/ 03 августа 2011

Я предполагаю, что вы пытаетесь получить все сущности магазинов, у которых есть лат или долг.Вы должны проверить широту или долготу! = Ноль вместо того, чтобы сравнивать с вашей десятичной строкой из 6 символов.

...