NSString * path: первый путь в коде всегда загружается, даже если условие if-else ложно - PullRequest
0 голосов
/ 03 апреля 2012

Я внедряю приложение 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;

1 Ответ

1 голос
/ 03 апреля 2012

Вы, вероятно, хотите использовать isEqual:, а не compare:.

(compare: возвращает NSComparisonResult, которое является одним из трех значений: NSOrderedAscending, NSOrderedSame или NSOrderedDescending. Сказать ![object1 compare:object2] не имеет большого смысла.)

...