【问题标题】:How to access variables from different class Obj-C [duplicate]如何访问来自不同类 Obj-C 的变量 [重复]
【发布时间】:2017-01-08 06:13:33
【问题描述】:

我有 TableViewController 和 ViewController。

Airports.h

@interface Airports : UITableViewController

@property(strong, nonatomic) NSNumber* latitude;
@property(strong, nonatomic) NSNumber* longitude;
@property(strong, nonatomic) NSString* selectedAirportName;

@end

Airports.m

这是一个设置 latitudelongitudeselectedAirportName 属性的实例。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSArray *airportNames = airportsArray[indexPath.row];
    self.selectedAirportName = [airportNames valueForKey:@"$"];
    NSArray *airportCoordinates = airportsCoordinates[indexPath.row];
    self.latitude = [airportCoordinates valueForKey:@"Latitude"];
    self.longitude = [airportCoordinates valueForKey:@"Longitude"];
}

行选择将用户转发到 ViewController,其中我有一个实例,该实例根据所选行中的信息显示带有标记的 GoogleMap。如何让该实例访问 Airports 类中的 latitudelongitudeselectedAirportName 属性?实际上,我想知道如何将这些属性公开,以便在 didSelectRowAtIndexPath 实例和 Airports 类之外对其进行操作。

我只是一个初学者。所以不要拍我:)

【问题讨论】:

  • 关于这个话题有很多问题。寻找通过 segues 传递的数据。
  • 这可能是 iOS 标签中最常见的问题(参见此处,也可参见 stackoverflow.com/a/9736559/294949)。我会要求其他人在这里给出答案和链接,以考虑 为什么 它经常被询问和重新询问。我认为原因是给出的答案往往是关于 vc 通信的特定机制,而对于 iOS 中实践的 MVC 的想法还不够。

标签: ios objective-c ios9


【解决方案1】:

您应该创建一个单独的对象,将您希望传递给视图控制器的数据与谷歌地图进行映射,可以将其称为 Airport 之类的名称。

然后当你从第一个视图控制器(机场)推送 segue 时,你可以在 prepareforsegue 方法中将此对象传递给视图控制器。

How to pass prepareForSegue: an object

【讨论】:

  • 谢谢。那么,当我去 ViewController TableViewController 消失的所有属性?知道了。但是当我尝试在 Airports.m 中使用不同实例打印纬度和经度值时,NSLog 没有显示任何内容
  • 这个万岁。单独的对象可以被认为是应用程序的状态,它的存在理由,也称为“模型”。
【解决方案2】:

在你的ViewController.h 中看起来像这样:

#import <UIKit/UIKit.h>


@interface ViewController : UIViewController

@property NSNumber* airportLatitude;
@property NSNumber* airportLongitude;

@end

然后在你的Airports.m中,当你实例化你的ViewController时,你可以像这样设置ViewController的值:

ViewController *view = [[ViewController alloc] init];

view.airportLatitude  = [NSNumber numberWithInt:1];
view.airportLongitude = [NSNumber numberWithInt:1];

【讨论】:

  • 我不能不同意,但会挑剔一点并说(a)view 是视图控制器实例的坏名称,以及(b)建议分配这样的 VC邀请读者犯最常见的错误(即转到该 vc 的 不同 实例),以及 (c) 原则性答案应在某些时候包含“模型”一词,以及包括应该将 vcs 视为共享模型的检查者和编辑者的想法。
  • 我会接受并考虑它,然后尽我所能。
猜你喜欢
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 2017-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多