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