Objective c 跨类文件传递变量的问题

Objective c 跨类文件传递变量的问题,objective-c,xcode,class,variables,Objective C,Xcode,Class,Variables,我很难将变量从一个类文件传递到另一个类文件。我尝试过全局变量creator extern,但也不起作用 具体来说,我正在尝试将一个变量从我创建的名为NDSClassSiteViewController的新类文件传递到主控制器ndsclasssmasterviewcontroller 我已将@property添加到.h文件中,如下所示: @interface NDSClassSiteViewController : UITableViewController { NSArray *sit

我很难将变量从一个类文件传递到另一个类文件。我尝试过全局变量creator extern,但也不起作用

具体来说,我正在尝试将一个变量从我创建的名为
NDSClassSiteViewController
的新类文件传递到主控制器
ndsclasssmasterviewcontroller

我已将@property添加到.h文件中,如下所示:

@interface NDSClassSiteViewController : UITableViewController {

    NSArray *sitesMenu;

}

@property (nonatomic, retain) NSString *siteid;

@end
#import "NDSClassSiteViewController.h"

#import "NDSClassMasterViewController.h"

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

@implementation NDSClassSiteViewController

@synthesize siteid;
- (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;
    }
}
然后将@synthesis转换为.m文件,如下所示:

@interface NDSClassSiteViewController : UITableViewController {

    NSArray *sitesMenu;

}

@property (nonatomic, retain) NSString *siteid;

@end
#import "NDSClassSiteViewController.h"

#import "NDSClassMasterViewController.h"

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

@implementation NDSClassSiteViewController

@synthesize siteid;
- (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;
    }
}
我在.m文件中设置变量如下:

@interface NDSClassSiteViewController : UITableViewController {

    NSArray *sitesMenu;

}

@property (nonatomic, retain) NSString *siteid;

@end
#import "NDSClassSiteViewController.h"

#import "NDSClassMasterViewController.h"

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

@implementation NDSClassSiteViewController

@synthesize siteid;
- (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;
    }
}
然后,我尝试使用以下命令在主视图控制器中访问它:

- (void)viewDidLoad
{
    [super viewDidLoad];

    globalid = siteid;


}
但我得到一个错误:
使用未声明的标识符siteid


我真的不知道为什么它不允许我使用这个变量?我遗漏了什么吗?

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

要读取属性,请执行以下操作:

aSiteViewController.siteID
[aSiteViewController siteID]
要设置它,请执行以下操作:

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

当您使用
NDSClassSiteViewController
方法时,则
self
指向您可能要使用的实例。否则,您可能会在方法中创建它,或者将其作为参数传入。此外,当您处于
NDSClassSiteViewController
的实例方法中时,您可以访问直接支持属性的实例变量-通常这将是
\u siteID
,但您需要手动合成,因此只要
siteID
就可以了。请注意,我使用了
siteID
,而不是您正在使用的
siteID
。我这样做是为了可读性和遵循既定的Objective-C命名约定。

您没有使用任何变量。我只看到类级属性和私有IVAR的声明。你声明它是站点VC的一部分,但你说你试图从主VC访问它。这是对的还是你问题中的一个输入错误?没错,我创建了一个新的类文件调用SiteViewController,我正在尝试从那里访问MasterViewController中的一个变量。然后向我们展示master view控制器的声明和实现!我在MasterViewController中唯一要做的事情是#导入“NDSClassSiteViewController.h”;谢谢你的帮助!我使用NDSClassMasterViewController*detailControllerTwo=segue.destinationViewController从SiteViewController更改了主视图控制器上的变量;detailControllerTwo.globalid=siteid;