2012-01-27 3 views
0

マップに複数のピンを配置するために注釈を配列に追加しようとしています。私はforループのすべてを持っています。最初にループすると、配列にオブジェクトが正しく追加されます。それが戻ってくると...配列には0個のオブジェクトがあります。なぜ誰かが私に言うことができますか?NSMutableArrayが時期尚早にリリースされているようです

編集:私はARCを使用しています。

-(void)plotMultipleLocs { 
float latitude; 
float longitude; 
NSRange commaIndex; 
NSString *coordGroups; 
for (int i=0; i<=cgIdArray.count; i++) { 
    coordGroups = [cgInAreaArray objectAtIndex:i]; 
    commaIndex = [coordGroups rangeOfString:@","]; 
    latitude = [[coordGroups substringToIndex:commaIndex.location] floatValue]; 
    longitude = [[coordGroups substringFromIndex:commaIndex.location + 1] floatValue]; 
    CLLocationCoordinate2D loc = CLLocationCoordinate2DMake(latitude, longitude); 
    MKCoordinateRegion reg = MKCoordinateRegionMakeWithDistance(loc, 1000, 1000); 
    self->mapView.region = reg; 
    MKPointAnnotation* ann = [[MKPointAnnotation alloc] init]; 
    ann.coordinate = loc; 
    ann.title = [cgNameArray objectAtIndex:i]; 
    ann.subtitle = [cgLocArray objectAtIndex:i]; 
    NSMutableArray *mutAnnArray = [NSMutableArray arrayWithArray:annArray]; 
    [mutAnnArray addObject:ann]; 
} 
} 

答えて

4

ループ内に変更可能な配列を作成し、それにオブジェクトを追加しています。

ループの次の反復では、新しい可変配列を作成し、新しい注釈を追加します。

はさておき、あなたが別の配列からそれを作るだけではなく、基本的には

annArrayにあなたの注釈を追加して、あなたは一回の反復限り続くようにオブジェクトを追加している配列を、その後の外に出ているという事実のままに範囲。

は、ループの外に列を移動してみてください:

-(void)plotMultipleLocs { 
    float latitude; 
    float longitude; 
    NSRange commaIndex; 
    NSString *coordGroups; 

    NSMutableArray *mutAnnArray = [NSMutableArray arrayWithArray:annArray]; // Create one array outside the loop. 

    for (int i=0; i<=cgIdArray.count; i++) { 
     coordGroups = [cgInAreaArray objectAtIndex:i]; 
     commaIndex = [coordGroups rangeOfString:@","]; 
     latitude = [[coordGroups substringToIndex:commaIndex.location] floatValue]; 
     longitude = [[coordGroups substringFromIndex:commaIndex.location + 1] floatValue]; 
     CLLocationCoordinate2D loc = CLLocationCoordinate2DMake(latitude, longitude); 
     MKCoordinateRegion reg = MKCoordinateRegionMakeWithDistance(loc, 1000, 1000); 
     self->mapView.region = reg; 
     MKPointAnnotation* ann = [[MKPointAnnotation alloc] init]; 
     ann.coordinate = loc; 
     ann.title = [cgNameArray objectAtIndex:i]; 
     ann.subtitle = [cgLocArray objectAtIndex:i]; 
     [mutAnnArray addObject:ann]; // Add the annotation to the single array. 
    } 

// mutAnnArray will go out of scope here, so maybe return it, or assign it to a property 
} 
+0

ええと...私の同僚は、私がページをリフレッシュする前にそれを理解しました。ハハ。しかし、答えをありがとう。私はあなたのためにそれをマークして、担当者を得ます。 – tallybear

+0

私はannArrayから別の配列を作成しています。なぜなら、NSMutableArrayとしてannArrayを宣言し、それが動作しないようにしようとしているからです。配列内に0個のオブジェクトがあります。 annArrayはivarです。 – tallybear

0

リリースされないようにインスタンスを保持しようとしましたか?

+0

私はARCを使用しています。私がそれを保持するなら、それは私に叫ぶ。笑。 – tallybear

0

たびにループを通って、あなたは異なる配列の内容を持つ新しい可変配列を作成します。以前の繰り返しで追加したオブジェクトを含む変更可能な配列は保持されません。

関連する問題