5

X-Code の同じプロジェクト内の別のクラスからアクセスしたい静的変数があります。.h ファイルと .m ファイルで宣言し、値を指定した後、他のクラスにアクセスすると、次のようなエラー メッセージが表示されました。

「タイプ 'yy' のオブジェクトにプロパティ 'xx' が見つかりません」

変数を .h で extern として宣言し、.m で変数型として再宣言しました。.h で静的に変更しようとしましたが、まだ機能しません。はい、それが問題である場合に備えて、変数を含むファイルをインポートしました。

誰でも私を助けることができますか?

編集:

これは私が現在使用しているコードです:

ソース.h

static int anObject;

@interface source : NSObject

ソース.m

static int a = 2

@implementation source

目的地.m

# include "source.h"

@implementation destination

- (void) anObjectTestFunction 

{     
  printf("%d", source.anObject); //the first version
  printf("%d", anObject); //second version  
}

2 番目のバージョンに行った後、destination.h の変数 anObject にアクセスできますが、その値は 2 ではなく、0 です。source.h で宣言したものに従う必要があります。

4

3 に答える 3

8

.h ファイルで宣言された静的変数が .h ファイルの外にあると想定しています@interface。次のようなものです:

static NSString *myObjectTest = @"Test";

@interface MyObject : NSObject 
@end

その場合、次のような方法でアクセスすることはできません。

MyObject *obj = [[MyObject alloc] init];
[obj myObject]

また

obj.myObject

これが、「タイプ 'yy' のオブジェクトにプロパティ 'xx' が見つかりません」というメッセージが表示される理由です。その静的変数は、MyObject のオブジェクトのプロパティではありません。

myObjectTest.h ファイルをインポートする限り、その静的変数にアクセスできます。

更新 以下の Chuck のコメントを参照してください。

于 2012-08-22T17:04:30.177 に答える
4

静的変数とは何かについて混乱しているようです。Java や C++ などの他の言語では、「静的」は 2 つのいずれかを意味します。ファイルまたは関数のスコープでは、プログラムの存続期間全体にわたって存在する、そのファイルまたは関数のいずれかにスコープが設定された変数を意味します。クラス スコープでは、クラス変数のみを意味します。

C++ には両方の定義があり、Java には 2 番目の定義しかありませんが、Objective-C には最初の定義しかありません。静的変数は、宣言されている場所でのみ使用できます。2つは矛盾しているため、「extern static」変数などはありません。アクセスするには、おそらくグローバル変数またはクラス メソッドを含む静的変数のいずれかが必要です。

于 2012-08-22T17:03:11.317 に答える
-1

これは名前空間の問題でしょうか? アクセスを完全に修飾してみてください。あなたのコードの抜粋を投稿することは本当に役に立ちますが、私は千里眼が得意ではありません:-)

于 2012-08-22T16:51:35.760 に答える