0

.hファイルにグローバル変数として次のものがあります

NSMutableArray *garr;

および以下の.mファイル

- (void)roundone {
    if (!garr) {
        garr = [[NSMutableArray alloc]init];
        for (int x = 0; x < 900; x++) {
            [garr addObject:[NSNumber numberWithInt: arc4random()%600]];        
        }
    }
}

任意のメソッドでvargarrを呼び出す際の問題。ただし、nslogの値は正しく返されますが、コードでgarrを使用すると、システムがクラッシュします。任意のアイデアplz

-(IBAction)clicked:(id)sender{ 
NSLog(@"%@",garr);
//bubbleSort(array);    // sort the array
int n = [garr count]  ;
for (int i = 0; i < n-1; i++)
    for (int j = 0; j < n-i-1; j++)
        if ([[garr objectAtIndex: j] compare:[garr objectAtIndex: j+1]] == 
            NSOrderedDescending)
            //#define SWAP(arr, x, y) 
            do {    
                id oldX = [garr objectAtIndex: (j)];    
                // NSLog(@"%d %s",oldX ,oldX);
                [garr replaceObjectAtIndex: (j) withObject: [garr objectAtIndex: (j+1)]];
                [garr replaceObjectAtIndex: (j+1) withObject: oldX];    
            } while (0);


NSString *element;
NSEnumerator *iterator = [garr objectEnumerator];
while ((element = [iterator nextObject]) != nil)
    NSLog(@"elments %@",element);

コード内で何を複雑にするかはわかりませんが、グローバル変数がメソッド内にある場合はコードは正常に機能しますが、メソッド外のgarrは機能しません

4

1 に答える 1

1

グローバル変数を定義するのではなく、ヘッダーで宣言する必要があります。変数をマークし、定義をファイルに入れ、変数を に初期化します。extern.mnil

ヘッダ:

extern NSMutableArray *garr;

.m ファイル:

NSMutableArray *garr = nil;

すべてを再構築すると、クラッシュが解消されるはずです。

于 2012-08-30T20:47:36.243 に答える