发出跨类文件传递变量

时间:2013-03-03 08:47:39

标签: objective-c xcode class variables

我很难将变量从一个类文件传递到另一个类文件。我尝试过Global Variable creator extern,但这也行不通。

具体来说,我正在尝试将我创建的名为NDSClassSiteViewController的新类文件中的变量传递给主控制器NDSClassMasterViewController

我已将@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

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

1 个答案:

答案 0 :(得分: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命名约定。