0

AppDelegate で、作成したクラスのヘッダーをインポートし、そのインスタンスをプロパティ化して合成しました (AppDelegate で)。今、他の 2 つのビューからこのインスタンス内のメソッドと変数にアクセスしようとしています。私はobjective-cには比較的慣れていませんが、これまでのところ、これを行うと次のことがわかりました。

AppDelegate *appdelegate = [AppDelegate new];

AppDelegate 内のクラスから新しいインスタンスを取得するだけなので、1 つのビューから変数を設定すると、別のビューからはアクセスできません。私がこのようにするなら、私はそれを読んだ:

AppDelegate *ap = (AppDelegate *)[[UIApplication sharedApplication] delegate];

これにより、既存のインスタンスにアクセスできるようになります。しかし、うまくいきません。

私がこれをやろうとしている方法は完全に間違っていますか? 助けてくれてどうもありがとう!

アップデート:

AppDelegate 内でこれを行うと、次のようになります。

myClass.string = @"test";
NSLog(@"appDelegate: %@", myClass.string);

私はこれを得る:

appDelegate: (null)

更新 2:

@class AppDelegate; と書きました。viewController の @import 行の下にありますが、それでも myClass にアクセスできません。これがビューから機能しない主な問題は、AppDelegate から myClass にアクセスすることさえできないことです。

AppDelegate.h に次のように書きました。

@property (strong, nonatomic) testClass *myClass;

AppDelegate.m で:

#import "testClass.h"
@synthesize myClass;

これは正しいはずですよね?

myClass.h

 @property (strong, nonatomic) NSString *string;

myClass.m

@synthesize string;

次に、appDelegate から myClass にアクセスしようとすると、次のように記述します。

self.myClass.string = @"test";
NSLog(@"appDelegate: %@", self.myClass.string);

結果は次のとおりです。

appDelegate: (null)
4

3 に答える 3

2

#import "AppDelegate"

そしてまた書く

@class AppDelegate;

于 2012-06-21T13:14:41.393 に答える
2

それを示していない限り、testClass を割り当てたり、myClass に割り当てたりしていません。Objective-C は、C++ や Java とは異なり、特定のクラス タイプの変数を単純に宣言して、スタック上でインスタンス化できます。使用する各クラスは、手動または InterfaceBuilder を介してインスタンス化する必要があります。例外は、単一の共有インスタンスを持つさまざまなフレームワークによって提供されるクラスがいくつかあることです。これらのクラスを割り当てるのではなく、共有インスタンスを要求するだけです。ただし、ここではそうではありません。独自のクラスなので、割り当てる必要があります。

次のようになります。

myClass = [[testClass alloc] init];
于 2012-06-21T14:45:10.940 に答える
2

割り当てて初期化する必要があると思いますmyClass

ファイル myClass = [MyClass alloc] init]に書き込むAppDelegate.m

于 2012-06-21T13:30:51.493 に答える