0

あるクラス ファイルから別のクラス ファイルに変数を渡すことが困難です。グローバル変数クリエーター 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;
    }
}

次に、次を使用してマスター ビュー コントローラーでアクセスしようとします。

- (void)viewDidLoad
{
    [super viewDidLoad];

    globalid = siteid;


}

しかし、私はエラーが発生します:use of undeclared identifier siteid

変数を使用できない理由がよくわかりません。何か不足していますか?

4

1 に答える 1

1

でプロパティを宣言しましたNDSClassSiteViewController。プロパティにアクセスするには、スコープ内の のインスタンスが必要NDSClassSiteViewControllerです。また、プロパティの構文 (ドット構文または標準のメソッド呼び出し構文) を使用してアクセスする必要があります。

プロパティを読み取るには:

aSiteViewController.siteID
[aSiteViewController siteID]

設定するには:

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

メソッド内にいるときは、使用する可能性が高いインスタンスNDSClassSiteViewControllerself指します。それ以外の場合は、おそらくメソッドで作成するか、パラメーターとして渡すことになります。また、インスタンスメソッドにいる場合NDSClassSiteViewController、プロパティを直接サポートするインスタンス変数にアクセスできます-通常、これは_siteID手動で合成されるため、機能するsiteIDはずです。あなたが使用している代わりに私がしたことに注意してください。これは、読みやすくするためと、確立された Objective-C の命名規則に従うためです。siteIDsiteid

于 2013-03-03T09:30:48.577 に答える