2010-01-09 52 views
0

所以我最簡單的想法是創建一個應用程序,允許用戶通過電子郵件報告他們位置的緯度和經度座標。您點擊按鈕,電子郵件屏幕通過MessageUI框架出現,「收件人」,「主題」和「正文」字段已預先輸入,只需要用戶點擊「發送」即可。使用全局變量在類之間傳遞值

我的問題是,我需要將經緯度座標包含在電子郵件正文中。這些座標變量在 - (void)CLLocationManager函數中生成並轉換爲字符串,就像我需要的一樣。問題是,電子郵件是從另一個函數發送的, - (void)displayComposerSheet,並且我無法弄清楚如何將經緯度/長字符串放入要發送的電子郵件正文中。在通過Google衝擊我的方式之後,我遇到了全局變量的概念。這似乎是我需要實現的。很多消息來源都說「在應用代理中聲明你的變量,然後你就可以在代碼中的任何地方使用它們」,或者至少這就是我所說的。再次強調,我對這款遊戲相當陌生。所以,如果我要在delegate.m文件中創建我的緯度和經度字符串而不是項目.m文件,那麼我可以在閒暇時對它們進行調用,然後將它們發送給我電子郵件的正文。

我只是不完全在我所有的「東西」應該去的地方。這是我到目前爲止(完美的作品)。我只需要用CLLocationManager生成的ACTUAL值替換我的默認緯度值「12.3456」和經度值「78.9012」。任何幫助將不勝感激。謝謝!

//Code that generates the Latitude and Longitude strings 
//-------------------------------------------------------- 
- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 


{ 
    //Breaks down the location into degrees, minutes, and seconds. 

    int degrees = newLocation.coordinate.latitude; 
    double decimal = fabs(newLocation.coordinate.latitude - degrees); 
    int minutes = decimal * 60; 
    double seconds = decimal * 3600 - minutes * 60; 
    NSString *lat = [NSString stringWithFormat:@"%d° %d' %1.4f\"", 
        degrees, minutes, seconds];  
    latitude.text = lat; 
    degrees = newLocation.coordinate.longitude; 
    decimal = fabs(newLocation.coordinate.longitude - degrees); 
    minutes = decimal * 60; 
    seconds = decimal * 3600 - minutes * 60; 
    NSString *longt = [NSString stringWithFormat:@"%d° %d' %1.4f\"", 
         degrees, minutes, seconds]; 
    longitude.text = longt; 

} 





//Code that prepares the email for sending 
//------------------------------------------ 
-(void)displayComposerSheet 
{ 
    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; 
    picker.mailComposeDelegate = self; 

    [picker setSubject:@"New Location Report!"]; 


    // Set up recipients 
    NSArray *toRecipients = [NSArray arrayWithObject:@"[email protected]"]; 

    [picker setToRecipients:toRecipients]; 


    // Fill out the email body text 
    NSString *message = @"user reported their location at:"; 
    NSString *msgLat = @"12.3456"; 
    NSString *msgLong = @"78.9012"; 

    NSString *emailBody = [NSString stringWithFormat:@"%@\nLatitude = %@\nLongitude = %@", message, msgLat, msgLong]; 


    [picker setMessageBody:emailBody isHTML:NO]; 

    [self presentModalViewController:picker animated:YES]; 
    [picker release]; 
} 
+0

「在我敲開Goog​​le的道路之後,我遇到了全局變量的概念。 ......很多消息來源都說「在應用代理中聲明你的變量,然後你就可以在代碼中的任何地方使用它們」,或者至少這就是我所說的意思。「不,那不是什麼一個全局變量是 - 它只是訪問一個對象(應用程序,獲取它的委託)的屬性,然後訪問該對象的一個​​屬性。一個全局變量就是這樣的:一個在全局範圍內的變量(不受函數或方法的範圍限制,也不受實例變量的限制)。 –

回答

7
// NSString *msgLat = self->latitude.text; do not do this 
// NSString *msgLong = self->longitude.text; or this 
NSString *msgLat = latitude.text; 
NSString *msgLong = longitude.text; 

不需要全局變量(假設這兩種方法都屬於同一類)。

+0

如果它的同一類別不需要在這裏解除引用。正確答案雖然。 –

+0

爲清晰起見進行了編輯。你真的不想像那樣通過自我解除引用。 – bbum

+0

....並指出,否則一個完全正確的答案。 – bbum

1

對此,您不需要全局變量。只需在控制器類中創建實例變量(ivars),並在其中存儲lat/long。然後,在您的displayComposerSheet方法中,使用您之前計算的值。