2014-07-12 4 views
0

나는 명백한 문제처럼 보이는 솔루션을 찾고 있지만 행운이 없었습니다.NSObject의 CLLocationManager

CLLocationManager을 초기화하고 아래의 방법으로 내 ViewController에서 NSObject을 호출하고 현재 위치를 반환해야합니다.

locationObject *location = [[locationObject alloc] init]; 
[location updateLocation]; 

그러나 내가 할 수없는 것은 문제를 일으키지 않고 데이터를 다시보기 컨트롤러로 전달하는 것입니다. 나는 ... 사용하여 시도했다

ViewController *controller = = [[ViewController alloc] init]; 
[controller updateContent:lat longitude:lng]; 

이것은의 ViewController에서 updateContent 방법에 NSLog를 통해 모두를 출력하지만 레이블 중 하나를 업데이트하거나 방법 중 하나를 호출하지 않습니다.

UILabel을 단순히 업데이트하려고하지만 아무 일도 일어나지 않습니다. 나는 이것이 하나의 메소드를 호출하고 전체 View Controller를 호출하지 않는다는 사실과 관련이 있다고 확신한다.

저는 ViewController를 잘못 호출하고 있다고 생각합니다. 대신 부모로 호출해야한다고 생각합니다.하지만 내 인생에서 나는 그것을 수행하는 방법을 알 수 없습니다!

미리 도움을 주셔서 감사합니다.

답변

1

그래서 UIViewController가 있습니다. 사용자가 만든 'A'라고 부르며 하위보기로 레이블이 있습니다. 그런 다음 여러분의 CLLocationManager 대리자가 추측하고있는 객체가 있습니다. 당신이하고있는 일은 완전히 새로운 UIViewController 'B'를 작성하고 위치를 업데이트하라고 알려주지 만, 원본 'A'보기 컨트롤러를 참조하지 않기 때문에 로그 문 이 올바른 것으로 기록되는 이유는 바로입니다. 정보는 없지만 'A'는 바뀌지 않습니다.

이 문제에 대해서는 몇 가지 방법이 있지만 가장 쉬운 방법은 NSNotificationCenter를 사용하여 앱에 "이봐, 새로운 위치를 얻었습니다! 두 번째 단계는 위치 객체에 속성을 추가하여 외부 객체가이 위치를 참조하도록 허용하는 것입니다. 다음을 수행하여 작동하는지 확인합니다 :

위치 객체의 .h 파일에 다음을 추가합니다.

@property (nonatomic, retain) CLLocation *currentLocation; 

위치 개체가 CLLocationManager에서 업데이트 된 위치를 받으면 다음을 수행합니다.

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 
    // get the most recent object from the CLLocationManager and set it as your currentLocation 
    self.currentLocation = [locations lastObject]; 

    // broadcast to the application that you have a new location 
    [[NSNotificationCenter defaultCenter] @"GotNewLocation" object:nil userInfo:nil]; 
} 

그런 다음 뷰 컨트롤러 내부에, 당신의 초기화 또는 viewDidLoad에 방법처럼이 곳을 추가

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNewLocation) name:@"GotNewLocation" object:nil]; 

를 그리고, 당신이 당신의 handleNewLocation의 함수 내에서해야 할 일을 처리 :

- (void)handleNewLocation { 
    // get the current location from the location object and use its coordinate to do what you need 
    CLLocation *currentLocation = yourLocationObject.currentLocation; 
    [self updateContent:currentLocation.coordinate.latitude longitude:currentLocation.coordinate.longitude]; 
} 
+0

안녕 마이크, 불분명하게해서 죄송합니다. ViewController는 코드가 위에있는 NSObject 내에서 정의했습니다. NSObject (ViewController)의 부모 하위 클래스에서 메서드를 호출하려고합니다. 그래서 자기가 작동하지 않습니다. 도와 줘서 고마워. –

+1

아, 알았어. 내가 편집하고 더 설명하려고하자. – Mike

+0

위의 편집이 의미가 있습니까? – Mike