2011-12-21 5 views
1

関連するコードの部分サンプルです。addObjectsFromArray:グローバルNSMutableArrayにコピーしない

static NSMutableArray *radioInputArray; 
static NSMutableArray *buttonsArray; 


- (IBAction)lookForRadioButtons:(id)sender { 
    // NSLog(@"Testing"); 
    NSError *error; 
    NSString *radiostr = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"getRadios" ofType:@"txt"] encoding:NSASCIIStringEncoding error: &error] ; 
    if (radiostr == nil) 
    { 
     NSLog (@"Error! %@", error); 
    } 
    else 
    { 
     NSLog(@"%@",radiostr); 
     NSString *radiotxt= [webView stringByEvaluatingJavaScriptFromString:radiostr]; 
     NSLog(@"%@", radiotxt); 
     NSArray *myRadios = [radiotxt componentsSeparatedByString:@"::"]; 
     [radioInputArray addObjectsFromArray:myRadios]; 
     NSLog(@"%d", myRadios.count); 
     NSLog(@"Number of buttons in global radio array %d", radioInputArray.count); 
     NSLog(@"%d", scrollViewer.subviews.count); 
    } 
} 

だから、何の例外をスローしないとaddObjectsFromArray:後を除いて正常に動作しているようですが、グローバルNSMutableArrayの私のカウントが(myRadiosでカウントが56を=)0です。私は彼らがこの時点で平等でなければならないと確信していますが、そうではありません。私はNSMutableArrayをトップに近づけて、グローバルにアクセスできるように宣言しました。私はこれを割り当てて初期化するなどの何かを見逃していますか? C#のように自動的にそれをしないのですか?ここでも、これはWindowsプログラミングからのObjective-Cの世界への私の最初の進出です。あなたのradioInputArraynilある場合

+0

地獄の地獄です。あなたがそれを肯定的に働かせているように、そのような状況にはエラーはありません!恐ろしい。 – Fattie

答えて

1

あなたの二つのグローバル配列で何かをする前に

[[radioInputArray alloc] init]; 

を追加する必要があり、アレイ

を初期化できませんでした 、起こるかもしれません初期化されていません。

ライン

static NSMutableArray *radioInputArray; 
static NSMutableArray *buttonsArray; 

だけNSMutableArrayへのポインタとして2つの変数を定義するので、あなたは彼らがクラスNSMutableArrayの実際のインスタンスを指すように取得する必要があります。

初期化コードのどこかに、またはアクセッサ(クラスメソッドの場合に最適)を使用して、変数を空の新規に割り当てられたNSMutableArrayに設定する必要があります。

+ (NSMutableArray*)radioInputArray 
{ 
    if (!radioInputArray) { 
     radioInputArray = [[NSMutableArray alloc] init]; 
    } 

    return radioInputArray; 
} 

はその後、グローバル変数の代わりにあなたのコード内でアクセサを使用します。ここでは

はそれを行うための方法です。

+0

私は、受信者タイプMutableArrayがセレクタallocでメソッドを宣言していないというエラーが発生し続けます。 – Kevrone

+0

私はどのように愚かです!それは '[[NSMutableArray alloc] init]'でなければなりません。 – Monolo

+0

Rockin。助けてくれてありがとう。 – Kevrone

0

あなたがあなたがradioInputArray

+0

Nothin。私のヘッダーで次のように行った。 プロパティ(weak、nonatomic)NSMutableArray * radioInputArray; 次に配置します synthesize radioInputArray; 元の配列は56、radioInputArrayは0になってもビルドエラーは表示されませんが、私の.mファイル内にはまだ愛はありません。私は人々に通知したいと思うのでatシンボルを削除しました – Kevrone

0

オブジェクトを初期化するのに適した場所は、グローバルクラスの "init"メソッドです。

Ex。

-(id)init 
{ 
    if (self=[super init]) { 

     self.globalAllArtworkArray=[[NSMutableArray alloc] init]; 
     self.globalCollectionArray=[[NSMutableArray alloc] init]; 
     self.globalLookbookArray=[[NSMutableArray alloc] init]; 

    } 
    return self; 

} 

+(ASNGlobalClass *)shareManager 
{ 
    static ASNGlobalClass *sharedInstance = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     sharedInstance = [[self alloc] init]; 

    }); 

    return sharedInstance; 
} 
関連する問題