Ток for
цикл предполагает наложение существует или Безразлично» t существует, как только находит один другой оверлей, название которого не совпадает.
Но в этот момент цикл for
может не проверять оставшиеся наложения (один из которых может быть наложением, который вы ищете).
Например:
- Предположим, что уже 4 наложений на карте с названиями A, B, C и D.
- Предположим накладку вы хотите проверить (
polu
) имеет название C.
- Первая накладка проверил A. так как A не совпадает с C, существующий код немедленно добавляет еще накладку с именем С.
- Затем цикл
for
продолжается и смотрит на B. Опять же, поскольку B не соответствует C, существующий код добавляет еще один C.
- Затем цикл продолжается, смотрит на C, и журналы «уже добавлены».
- Затем цикл продолжается, смотрит на D, видит, что он не соответствует C, и добавляет другой накладной.
Вместо этого, вы хотите, чтобы остановить цикл, когда заголовок соответствия найден и если цикл заканчивается Совпадений не найдено, затем добавить наложение.
Пример:
BOOL poluExists = NO;
for (MKPolyline *feature1 in self.mapView.overlays) {
NSLog(@"feature1.title: %@", feature1.title);
NSLog(@"Polu.title: %@", polu.title);
//STOP looping if titles MATCH...
if ([feature1.title isEqualToString:polu.title]) {
poluExists = YES;
break;
}
}
//AFTER the loop, we know whether polu.title exists or not.
//If it existed, loop would have been stopped and we come here.
//If it didn't exist, loop would have checked all overlays and we come here.
if (poluExists) {
NSLog(@"Already added");
}
else {
NSLog(@"NOT");
[self.mapView addOverlay:polu];
}
Во втором примере в вопросе, containsObject:
будет работать только тогда, когда polu
был исходный объект, который был дан в первый раз addOverlay
был назван потому, что в этом случае, containsObject:
будет сравнивать адреса указателей, а не свойство title
наложений.
С помощью цикла for, вы не должны проверять наложения _all_ перед тем, как решить, добавлено ли оно или нет? Сейчас он решает, основываясь на результате первого наложения. Вторая попытка, вероятно, не работает, потому что «polu» не был добавлен исходным объектом. – Anna
Можете ли вы помочь мне исправить метод? Должен ли я сравнивать массив наложений с массивом от self.mapview.overlays? – JMIT