2013-03-03 81 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