2009-11-02 11 views
9

Mam niestandardowej klasy, który ma jako zmiennej instancji o współrzędnych:Uchwyt Puste struktury w Objective-C (współrzędnych w niestandardowej klasy)

CLLocationCoordinate2D eventLocation; 
@property(nonatomic) CLLocationCoordinate2D eventLocation; 

mam parsowania pliku XML, który ma pole opcjonalne które mogą lub nie mogą tam być. Jeśli jest ustawić go tak:

CLLocationCoordinate2D location; 
NSArray *coordinateArray = [paramValue componentsSeparatedByString:@","]; 
if ([coordinateArray count] >= 2) { 
    location.latitude = [[coordinateArray objectAtIndex:0] doubleValue]; 
    location.longitude = [[coordinateArray objectAtIndex:1] doubleValue]; 
} else { 
    NSLog(@"Coordinate problem"); 
} 
info.eventLocation = location; 

Co zrobić, to jest w zasadzie dodać adnotację na mapie

annotation.coordinate = alert.info.eventLocation; 

Wiem, że muszę zrobić kilka sprawdzenie tutaj, aby upewnić się, że istnieje, ale nie wolno mi robić if (info.eventLocation == nil) ani nawet if (info.eventLocation.latitude == nil)To wydaje się bardzo podstawowe pytanie, ale zrobiłem kilka wyszukiwania i nikt nie był w stanie naprawdę dostarczyć dobrej odpowiedzi/idei. Czy moja architektura jest całkowicie wyłączona?

Odpowiedz

24

Ponieważ CLLocationCoordinate2D jest strukturą, nie ma czegoś takiego jak wartość nil. Objective-C zainicjalizuje struktury na 0, jeśli są to zmienne instancji obiektu, więc jeśli nie ustawisz wartości dla eventLocation, annotation.coordinate.longitude i eventLocation.lattitude będą mieć wartość 0. Ponieważ jest to poprawna lokalizacja, nie jest to użyteczny znacznik.

chciałbym zdefiniować wartość nie phyical:

static const CLLocationDegrees emptyLocation = -1000.0; 
static const CLLocationCoordinate2D emptyLocationCoordinate = {emptyLocation, emptyLocation} 

a następnie przypisać tę wartość do swojego alert.info.eventLocation = EmptyLocationCoordinate reprezentować pustą wartość. Następnie możesz sprawdzić, czy jest to (alert.info.eventLocation == emptyLocationCoordinate).

+0

kiedy dodać to do mojego pliku .h mojego niestandardowego obiektu Dostaję błędy: Initializer element nie jest stała (przy inicjalizacji dla „”) EmptyLocationCoordinate.latitude Initializer element nie jest stała (przy inicjalizacji dla 'EmptyLocationCoordinate.longitude') – aleclerc

+0

Właściwie alert.info.eventLocation = EmptyLocationCoordinate nadal daje "Nieprawidłowe argumenty do Binary! =" błąd – aleclerc

+0

Ach, być może trzeba #define EmptyLocation. –

4

użyłem powyższy kod oprócz tego, że nie pozwolił mi zadeklarować const z innym const, więc ja po prostu zmienił go do:

static const CLLocationDegrees EmptyLocation = -1000.0; 
static const CLLocationCoordinate2D EmptyLocationCoordinate = {-1000.0, -1000.0}; 

dodałem również w moim pliku init dla klasy:

eventLocation = EmptyLocationCoordinate; 

Dzięki za pomoc Barry.

3

Tylko ze względu na kompletność można użyć stałej kCLLocationCoordinate2DInvalid, aby zachować odwołanie do nieprawidłowego CLLocationCoordinate2D. (Patrz: @Klaas's answer)

Powiązane problemy