2013-03-03 58 views
0

我无法从一个类文件传递变量到另一个类文件。我已经尝试过全局变量创建者extern,但这也不起作用。发布跨类文件传递变量

具体而言,我试图将一个新创建的类文件变量传递给主控制器NDSClassMasterViewController,该变量名为NDSClassSiteViewController

我已经添加了@property到.h文件如下:

@interface NDSClassSiteViewController : UITableViewController { 

    NSArray *sitesMenu; 

} 

@property (nonatomic, retain) NSString *siteid; 

@end 

然后是@synthesize到.m文件如下:

#import "NDSClassSiteViewController.h" 

#import "NDSClassMasterViewController.h" 

@interface NDSClassSiteViewController() { 
    NSMutableArray *_objects; 
} 
@end 

@implementation NDSClassSiteViewController 

@synthesize siteid; 

我设置的变量.m文件如下:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"showMenu"]) { 

     NSInteger row = [[self tableView].indexPathForSelectedRow row]; 

     //NSArray *appcell = [sitesMenu objectForKey:@"Table"]; 

     NSLog(@"AppCell %@", sitesMenu); 

     NSDictionary *entry = [sitesMenu objectAtIndex:row]; 

     self.siteid = [entry objectForKey:@"SITEID"]; 

     NSLog(@" sample SiteView %@", siteid); 



     //NDSClassMasterViewController *detailController = segue.destinationViewController; 
     //detailController.detailItemTwo = siteid; 
    } 
} 

然后,我尝试使用以下命令在Master View控制器中访问它:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    globalid = siteid; 


} 

但我得到一个错误:use of undeclared identifier siteid

我真的不知道为什么它不会允许我使用的变量?我错过了什么吗?

+0

您没有使用任何变量。我只看到类级属性和私有iVars的声明。 – CodaFi 2013-03-03 08:53:27

+0

您将其声明为网站VC的一部分,但您要说的是您试图从主VC中访问它。你的问题是对的还是错的? – 2013-03-03 09:01:38

+0

那是对的,我创建了一个新的类文件调用SiteViewController,我试图从MasterViewController中访问一个变量。 – Jimmypooza 2013-03-03 09:08:26

回答

1

您已声明NDSClassSiteViewController的财产。要访问属性,您需要在范围内使用NDSClassSiteViewController的实例,并且还必须使用属性语法(点语法或标准方法调用语法)访问该属性。

读取属性:

aSiteViewController.siteID 
[aSiteViewController siteID] 

要设置:

aSiteViewController.siteID = @"Site ID here"; 
[aSiteViewController setSiteID:@"Site ID Here"] 

当你在NDSClassSiteViewController然后self点,你可能想使用的实例的方法。否则,您可能会在方法中创建它,或者将它作为参数传入。另外,如果您处于实例方法NDSClassSiteViewController中,则可以直接访问支持该属性的实例变量 - 通常这将是_siteID,但是您手动合成,因此只需siteID应该可以工作。 请注意,我做了siteID而不是您正在使用的siteid。为了便于阅读并遵循既定的Objective-C命名约定,我这样做了。

+0

感谢您的帮助!我设法使用NDSClassMasterViewController * detailControllerTwo = segue.destinationViewController;从SiteViewController更改Master View控制器上的变量。 detailControllerTwo.globalid = siteid; – Jimmypooza 2013-03-03 10:15:37