从其他类 iOS 获取变量 (位置信息)

标签: ios Objective-C
发布时间: 2017/3/21 23:31:07
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

在"OfferViewController.m"中有一个 locationManager 函数。在 locationManager 函数中我得到 currentLatitude 和 currentLongitude。现在在"OfferDetailViewController.m"我想要向网站发送通过 JS 的位置。

我的问题 ist,那在"OfferDetailViewController.m"我 don´t 从"OfferViewController.m"获取位置信息

希望有人可以帮助我在这里是我的代码。谢谢你 !

OfferViewController.m:

@interface OfferViewController ()

@end
...
#pragma mark -
#pragma mark CLLocationManagerDelegate

-(void)locationManager:(CLLocationManager *)manager
   didUpdateToLocation:(CLLocation *)newLocation
          fromLocation:(CLLocation *)oldLocation
{
    NSString *currentLatitude = [[NSString alloc]
                                 initWithFormat:@"%+.6f",
                                 newLocation.coordinate.latitude];

    //NSLog(@"locationManager - latitude: %@", currentLatitude);

    NSString *currentLongitude = [[NSString alloc]
                                  initWithFormat:@"%+.6f",
                                  newLocation.coordinate.longitude];

    //NSLog(@"locationManager - longitude: %@", currentLongitude);

    OfferDetailViewController *offerDetailViewController = [[OfferDetailViewController alloc] init];
    offerDetailViewController.longTest = currentLongitude;
    offerDetailViewController.latTest = currentLatitude;
}

@end

OfferDetailViewController.m:

@interface OfferDetailViewController ()

@end
...
@synthesize latTest;
@synthesize longTest;
...
- (void)webViewDidFinishLoad:(UIWebView *)offerUrl {
    NSLog(@"webViewDidFinishLoad");

    if ([[self.offerUrl stringByEvaluatingJavaScriptFromString:@"document.readyState"] isEqualToString:@"complete"]) {
        // UIWebView object has fully loaded.
        NSLog(@"UIWebView object has fully loaded.");

        NSLog(@"webViewDidFinishLoad - longTest: %@", longTest);
        NSLog(@"webViewDidFinishLoad - latTest: %@", latTest);
...
    }
}

解决方法 1:

既然你要处理两个视图控制器,它建议使用segues。Xcode 的 storyboard 文件使您能够使用视觉效果,segues与一点点的编程帮助。

步骤

这里有几个步骤来完成什么问的。这些将在下文讨论中其余的答案。

  1. 创建在界限storyboard
  2. 名称在界限storyboard
  3. 创建 prepareForSegue︰ 方法和一套接收的视图控制器中的变量

制作的界限storyboard

首先,我会推荐链接的两个视图控制器通过其中之一segues。要做到这一点,请转到您 storyboard ,看看你起始的视图控制器 (在这种情况下,它是 OfferViewController)。查找按钮或细胞 (一些 UI 元素),将触发过渡。然后点击键盘上的"控制"按钮,然后单击该 UI 元素。应出现一条蓝线。将该线路跨越拖到你想要移动到 (在您的案例 OfferDetailViewController),视图控制器和释放。然后,从显示的选项,选择哪种过渡类型你喜欢 (通常情况下,如果视图是详细视图,您想要选择"推",但除非你有 UINavigationController 安装程序,这将引发错误。选择"模式"如果你不知道我那里只是说)。你最终的结果应该如下所示︰

How a modal segue looks. If your segue is not modal, the icon in the middle will be different.

命名的界限storyboard

接下来,你想要的名字你铺垫所以您可以以编程方式访问它。往前走,点击界限的中心图标。Xcode Ihe 右侧栏应翻转到一个视图,看起来像这样︰

Editing the segue name

现在,在标识符框中,键入在你铺垫的名字。这可以是任何你想要的但记得它是什么,因为稍后我们将使用它。我也推荐概述一般模式铺垫鉴定,所以,如果你有很多segues,你不必保持引用 storyboard ,但只得到的东西开始,是不必要的压力比。

在接收的视图控制器中设置变量

我们必须以编程方式执行此位。苹果有一个方便的功能,在 UIViewController 中定义 (因此,可从任何 UIViewController)。如果该函数的名称 ' prepareForSegue:'。让我们利用这一点。

# pragma mark - SEGUE PREPARATION

/**
 *  This method prepares to transition from THIS contoller to another controller that will     
 *  display the data in more detail.
 */

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    /* Verify this is indeed the segue you want; replace "YourSegueName" to whatever you 
        named your segue. */
    if ([[segue identifier] isEqualToString:@"YourSegueName"]) {
        OfferDetailViewController *receiverController = (OfferDetailViewController *)[segue destinationViewController];

        /* here you can set whatever variables you want in 'receiverController'. These 
           will be accessible in the viewDidLoad: method. An example is given below. */
        [receiverController setWhateverVariable:valueOfWhateverVariable];
    }
}

就是这样 !应将数据传输到您新的视图控制器,和你应该是好去 !

官方微信
官方QQ群
31647020