0

firstViewController内に「ロード」し、セグエによって他のクラスからアクセスしたいカスタムクラスがあります。私の問題は、firstViewController内のインスタンス変数にアクセスして変更することさえできないことです。どういうわけか私はそれを間違って「ロード」しています。これまで私が使用したコードは次のとおりです。

viewController.hの内部

@property (strong, nonatomic) myClass *newClass;

viewController.mの内部

@synthesize newClass;

次に、次の方法でアクセスしようとします。

self.newClass.string = @"myString";
if(newClass.string == @"myString"){
  NSLog(@"didn't work");
}

さて、「動作しませんでした」と表示されます。何故ですか?私が書くとき

myClass *newClass = [myClass new];

それは機能します。ただし、クラスとそのプロパティは、ViewControllerが再度読み込まれるたびに上書きされます。

あなたは何をお勧めします?どうもありがとうございます。

4

1 に答える 1

2

カーンが言ったように、あなたはあなたのクラスを初期化するのを忘れていました.ViewDidLoadの追加で、実際のオブジェクトではなく、それに対するポインタを宣言して作成しただけです.

self.newClass = [[myClass alloc] init];

それは機能します。ただし、クラスとそのプロパティは、ViewController が再度読み込まれるたびに上書きされます。

これは、その特定の Viewcontroller が読み込まれるたびに、クラスを再初期化しているためです。

プログラム全体で永続的なクラスが必要な場合は、シングルトン パターンを探します。

これは、特定のオブジェクトのインスタンスを 1 つだけ持ちたい場合に使用されます。そのオブジェクトの別のインスタンスを初期化しようとすると、既に持っているインスタンスを受け取るだけです。

PD: newClass.string == @"myString" が間違っています。

文字列を比較するときは isEqualToString メソッドを使用します。

于 2012-06-23T09:06:19.917 に答える