2009-12-05 7 views
0

이 프로그램에서 많이 수행 한 간단한 작업을 수행하려고합니다. 일단 앱이 실행을 끝내고 업데이트가 발생하면 현재 위치를 얻으려면 CLLocationManager를 시작하려고합니다. 내 응용 프로그램은 현재 위치를 얻는다는 점에서 작동합니다. NSLog는 현재 위치가 정상적으로 작동 할 때입니다. 문제는 하나의 객체에서 다른 객체로이 위치를 전달하려고 시도하고 거기에 도달하면 값을 가지지 않는다는 것입니다.Getter Accessor가 작동하지 않습니다. iphone SDK 목표 C

나는 접근 자 메서드를 찾고 있었고 모든 것이 내 프로그램에서 이러한 유형의 연산을 가지고있는 것처럼 보입니다. 나는 많은 예제를 따르려고했지만 아무도 작동하지 않는 것 같습니다.

다음은 몇 가지 코드입니다.

이것은 CLLocationManagerDelegate의 .h 파일입니다.

@interface YogaAllianceAppDelegate : NSObject <UIApplicationDelegate,CLLocationManagerDelegate> { 

CLLocationManager *locationManager; 
    CLLocation *mycurrentLocation; 

    float curLats; 
    float curLons; 
    BOOL locationDidUpdate; 

    UIWindow *window; 

    YogaAllianceViewController *viewController; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) CLLocationManager *locationManager; 
@property (nonatomic, assign) float curLats; 
@property (nonatomic, assign) float curLons; 
@property (nonatomic, assign) CLLocation *mycurrentLocation; 
@property (nonatomic, retain) IBOutlet YogaAllianceViewController *viewController; 
@end 

는 작동이 시점에서하는 .m 파일

@synthesize viewController, locationManager, curLats, curLons, mycurrentLocation; 





- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    self.locationManager = [[[CLLocationManager alloc]init] autorelease]; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    locationManager.delegate = self; 
    [locationManager startUpdatingLocation]; 


    locationDidUpdate = NO; 
    [window addSubview:viewController.view]; 
    [window makeKeyAndVisible]; 

} 


-(void)locationManager: (CLLocationManager *)manager 
    didUpdateToLocation: (CLLocation *)newLocation 
      fromLocation: (CLLocation *)oldLocation{ 

    [[NSNotificationCenter defaultCenter] 
    postNotificationName:@"currentLocationDidUpdate" object: self]; 

    [locationManager stopUpdatingLocation]; 



    NSLog(@"Core Location says location available"); 


    self.curLats = newLocation.coordinate.latitude; 
    self.curLons = newLocation.coordinate.longitude; 

    self.mycurrentLocation = newLocation; 


    NSLog(@"current position is then %@", [mycurrentLocation description]); 

} 

입니다. 나는 위치를 인쇄하고 모든 것을 인쇄 할 수 있지만 다른 객체에 그 위치가 필요하며 점 표기법을 다시 작성하는 모든 시도가 실패한 것 같습니다. 여기 있습니다. 객체의 시간 나는 그것을해야합니다. 여기

@interface School_Location_List_Controller : UIViewController { 


    CLLocation* currentLocation;  

} 

- (IBAction) btnBack_Clicked:(id)sender; 


@property (nonatomic, assign) CLLocation* currentLocation; 

그리고를하는 .m

@implementation School_Location_List_Controller 

@synthesize destinations, closeSchools, currentLocation; 



-(void) viewWillAppear: (BOOL)animated { 


    NSLog (@"Registered for location events"); 

    YogaAllianceAppDelegate *updated = [[YogaAllianceAppDelegate alloc]init]; 


    currentLocation = updated.mycurrentLocation ; 



    NSLog(@"current position here in the passed object is %@", [currentLocation description]); 


    [super viewWillAppear:animated]; 
} 

그것은 내가 혼란 스러워요이 점에에게 있습니다. 내가 그것을 인쇄 할 때, 그것은 단지 currentLocation이 Null이라고 말한다. 그것 같이 데이터를 결코 얻지 않았다.

당신을 미리 감사하십시오. 여기

YogaAllianceAppDelegate *updated = [[YogaAllianceAppDelegate alloc]init]; 

, 당신은 할당하고 새로운 개체, 응용 프로그램의 기존 위임에서 완전히 구별되는 하나를 초기화하고 있습니다 :

답변

0

귀하의 문제는이 라인입니다. 이 방법으로 문제가있는 경우

YogaAllianceAppDelegate *updated = (YogaAllizanceAppDelegate *)[[UIApplication sharedApplication] delegate]; 
+0

죄송합니다. 나는 심지어 그것을 붙 잡지 않았다! –

+0

DAVE !!!! 나는 너를 충분히 고마워 할 수 없다. 나는이 모든 것을 처음 접했고, 그 일에 대해 내 머리를 고문 해왔다. 그것의 항상 간단한 일. 고마워요. – Makinitez21

0

잘 모르겠어요,하지만이 시도 : 당신이 이미 존재하는 응용 프로그램 위임을 얻고 싶은 경우에 사용하는 당신은, assignmycurrentLocation 속성이 의미하는 때 세트, 당신은 객체에 대한 포인터를 가지고 있습니다. 위치가 해제되면 mycurrentLocation을 붙잡을 수 없습니다.

retain 또는 copy을 사용하는 것이 좋습니다.

+0

위의 @Dave Delong의 대답을보세요. 그의 말이 맞는 것 같습니다. 죄송합니다! –

+1

John, 답변 해 주셔서 감사합니다. 도움이되었습니다. – Makinitez21

관련 문제