0

パラメータとして配列を取るクラスメソッドがあります

+(void)classMethod:(NSArray*)array;

配列の値を使用して、外部の ViewController からこのメソッドにメッセージが送信されています。

[ViewController classMethod:ValueofArray]

今、私は Class メソッドと同じ ViewController のインスタンス メソッドからその配列の値にアクセスしたい

-(void)instanceMethod;

そんなことがあるものか ?

4

4 に答える 4

2

値を保持するには、静的クラス レベル変数を作成する必要があります。

例えば:

@implementation SOMyObject

static NSArray *thisArray;


+(NSArray*) thisArray
{
    return thisArray;
}

+(void) myMethod:(NSArray*) array;
{
    thisArray = array;
}

-(void) doWork
{
    //[SOMyObject thisArray]
}

@end
于 2013-02-01T04:12:20.437 に答える
1

あなたが書いた:

今、私は Class メソッドと同じ ViewController のインスタンス メソッドからその配列の値にアクセスしたい

しかし、クラス メソッドの要点は、それがクラスのインスタンスではないということです。クラスの変数やプロパティを表示する必要がない場合は、クラス メソッドを使用します。たとえば、 のようなメソッドは[MyClass countVowels:someString];「状態」なしでアクションを実行できるため、クラス メソッドの候補になる可能性があります。

一方、「[myClass countVowels];」と書くと、次のような意味になります。

MyClass * myClass = [[MyClass alloc] initWithString:@"some string]];
int howMany = [myClass countVowels];

この 2 番目のバージョンは、おそらく init メソッドに渡された文字列を格納し、後でその文字列の母音をカウントします。

それが役立つことを願っています。

于 2013-02-01T04:04:24.540 に答える
0

ヘッダーとクラスの実装の外側に、静的クラス変数を作成できます。

次に例を示します。

// MyClass.h

@interface MyClass : NSObject
+ (void)setClassArray:(NSArray *)array;
+ (NSArray *)classArray;
@end


// MyClass.m

#import "MyClass.h"

static NSArray *_myClassArray;

@implementation MyClass

+ (NSArray *)classArray
{
    return _myClassArray;
}

+ (void)setClassArray:(NSArray *)array
{
    if (_myClassArray != array)
    {
        _myClassArray = array;
    }
}

@end

したがって、次のようにクラス配列の値を設定します。

[MyClass setClassArray:[NSArray arrayWithObject:@"Some_Objects"]];

クラスのインスタンス内では、次のようにアクセスできます。

- (void)myInstanceMethod
{
    // setting to another ivar is optional and only shown for clarity

   NSArray *array = _myClassArray;
    // ... do whatever you want to do with it here...
}
于 2013-02-01T04:10:42.903 に答える
0

クラスメソッドは通常(そしてそうであると思われる)状態のない機能エンティティであることは事実です。探しているものは可能です。この場合、 のすべてのインスタンスがMyViewController使用したい単一の配列があるため、その情報を設定する他のクラスは気にしません。

MyViewController.m

static NSArray *staticArray;

+ (void)aClassMethod:(NSArray *)array
{
    staticArray = array;
}

- (void)anInstanceMethod
{
    NSLog(@"My staticArray: %@", staticArray);
}

とは言っても、これは非常に具体的で非標準的なケースです。ユースケースを再考するかもしれません。実際には、デリゲート パターン、デフォルトのシングルトン ( など) などが必要になるかもしれませ[NSNotificationCenter defaultCenter]ん。または、実際にはこれに適したユースケースがあります。良い。

いずれにせよ、あなたはそれを持っています。

于 2013-02-01T04:11:10.373 に答える