Я внедряю приложение iOS, которое в основном является планировщиком путешествий, и я использую KMLparser в своем коде для чтения из файлов KML.В настоящее время у меня есть файл KML для каждого маршрута между двумя точками на карте, потому что я хочу, чтобы приложение использовалось в автономном режиме.Однако я столкнулся с проблемой и надеялся, что кто-нибудь поможет мне ее исправить.
Я использую условия if-else, чтобы решить, из какого KML-файла выбрать для загрузки карту.Для тестирования я создал 2 KML-файла и 2 условия if-else.
Я использую NSString * path для чтения KML-файлов.Проблема здесь в том, что первый путь всегда выбирается независимо от того, что является условием if-else.У меня нет других путей, с которых программа может читать.Это всегда путь, который находится в первом условии if-else, из которого он читает.Если я изменю файл KML по первому пути, карта изменится соответствующим образом, но я не хочу изменять файлы KML, используя код.Какая польза тогда от графического интерфейса?
Я проверил, что условия if-else работают, используя:
[self.textField2 setText:[NSString stringWithUTF8String:"ONE"]];
и
[self.textField2 setText:[NSString stringWithUTF8String:"TWO"]];
, как вы можете видеть ниже вкод, и он работает отлично.Выход имеет значение «ОДИН», когда первое условие if-else является истинным, а выход - «ДВА», когда второе условие if-else является истинным.
Проблема только в «пути».или это?
Я так долго пытался найти решение, но я не знаю, в чем дело.Буду признателен за любую помощь от вас.
Спасибо!
Омран
-
РЕДАКТИРОВАТЬ: 10 апреля 2012
Итак, я убрал часть мусора в предыдущем коде, который я вам показал, и ниже вы можете увидеть модифицированный код.Проблема все еще существует!
Однако, по крайней мере, теперь я знаю, что это такое после использования NSLog .Как вы видите, у меня есть три условия, если иное.Проблема в том, что третье условие ( else ) всегда загружается!
Например, допустим, первое условие if-else истинно, поэтому NSLog дает мне:
2012-04-10 04:55:55.234 Untitled2[7681:11903] PATH 1(null)
но затем сразу же выполняется третье условие if-else, и NSLog дает мне:
2012-04-10 04:55:55.245 Untitled2[7681:11903] PATH 3(null)
Также, когда третье условие if-else истинно, я получаю:
2012-04-10 04:55:55.234 Untitled2[7681:11903] PATH 3(null)
2012-04-10 04:55:55.245 Untitled2[7681:11903] PATH 3(null)
Итак, я действительно близок к решению проблемы.Я знаю, что путь 3 всегда загружен, но я не знаю почему.Я проверил свой код, но не понимаю, почему всегда выполняется третье условие if-else.
Кто-нибудь может помочь с этим?
Спасибо.
Омран
self.busstops1 = [self.busstops objectAtIndex:1];
self.busstops2 = [self.busstops objectAtIndex:2];
self.busstops3 = [self.busstops objectAtIndex:3];
self.busstops4 = [self.busstops objectAtIndex:4];
self.busstops5 = [self.busstops objectAtIndex:5];
NSString *temp = self.textField.text;
NSString *temp2 = self.textField2.text;
int countKML;
NSString *path;
NSString *path2;
NSString *path3;
[self.map retain];
NSURL *url;
[self.map removeOverlays:self.map.overlays];
[self.map removeAnnotations:self.map.annotations];
//countKML=0;
if ( [temp isEqual:self.busstops1] && [temp2 isEqual:self.busstops2] )
{
NSLog(@"PATH 1%@",countKML);
[self.textField2 setText:[NSString stringWithUTF8String:"ONE"]];
path = @"";
path2 = @"";
path3 = @"";
countKML=1;
path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"AD Bus Map %d",countKML] ofType:@"kml"];
url = [NSURL fileURLWithPath:path];
}
else if ( [temp isEqual:self.busstops1] && [temp2 isEqual:self.busstops3] )
{
NSLog(@"PATH 2%@",countKML);
[self.textField2 setText:[NSString stringWithUTF8String:"TWO"]];
path = @"";
path2 = @"";
path3 = @"";
countKML=2;
path2 = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"AD Bus Map %d",countKML] ofType:@"kml"];
url = [NSURL fileURLWithPath:path2];
}
else {
NSLog(@"PATH 3%@",countKML);
self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:0];
[self.textField2 setText:[NSString stringWithUTF8String:"OTHER"]];
path = @"";
path2 = @"";
path3 = @"";
countKML = 0;
path3 = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"AD Bus Map %d",countKML] ofType:@"kml"];
url = [NSURL fileURLWithPath:path3];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"The route for the entered points is not available!" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK",nil];
[alert show];
[alert release];
}
kmlParser = [[KMLParser alloc] initWithURL:url];
[kmlParser parseKML];
[self.map removeOverlays:self.map.overlays];
// Add all of the MKOverlay objects parsed from the KML file to the self.map.
NSArray *overlays= [kmlParser overlays];
[self.map addOverlays:overlays];
[self.map removeAnnotations:self.map.annotations];
// Add all of the MKAnnotation objects parsed from the KML file to the self.map.
NSArray *annotations= [kmlParser points];
[self.map addAnnotations:annotations];
// Walk the list of overlays and annotations and create a MKMapRect that
// bounds all of them and store it into flyTo.
MKMapRect flyTo = MKMapRectNull;
for (id <MKOverlay> overlay in overlays) {
if (MKMapRectIsNull(flyTo)) {
flyTo = [overlay boundingMapRect];
} else {
flyTo = MKMapRectUnion(flyTo, [overlay boundingMapRect]);
}
}
for (id <MKAnnotation> annotation in annotations) {
MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation.coordinate);
MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0, 0);
if (MKMapRectIsNull(flyTo)) {
flyTo = pointRect;
} else {
flyTo = MKMapRectUnion(flyTo, pointRect);
}
}
// Position the self.map so that all overlays and annotations are visible on screen.
self.map.visibleMapRect = flyTo;