私はユーザーが変更可能な配列のお気に入りとしてアノテーションを保存できるマップアプリケーションを持っています。ユーザーが選択すると、すべてのお気に入りの注釈が表示されます。変更可能な配列からMKPointAnnotationオブジェクトを削除する
変更可能な配列に追加される注釈は、MKPointAnnotationクラスです。変更可能な配列にアノテーションを正しく追加することはできますが、変更可能な配列から特定のアノテーションを正しく削除するワーキング・ソリューションはありません。どのように特定の注釈を、お気に入りとして保存された複数の注釈を含む変更可能な配列から削除できますか?私のサンプルコードには、いくつかの機能しない解決策があります。
//** Correctly adds a favorite annotation to the mutable array favoriteAnnotationsArray **
-(void)addToFavoriteAnnotationsArray{
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
NSArray *components = [favoritesString componentsSeparatedByString:@","];
annotation.coordinate = CLLocationCoordinate2DMake([components[1] doubleValue], [components[0] doubleValue]);
annotation.title = [components[2] stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet];
[self.favoriteAnnotationsArray addObject:annotation];
}
//** Need to remove a favorite annotation from the mutable array favoriteAnnotationsArray **
-(void)removeObjectFromFavoriteAnnotationsArray{
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
NSArray *components = [favoritesString componentsSeparatedByString:@","];
annotation.coordinate = CLLocationCoordinate2DMake([components[1] doubleValue], [components[0] doubleValue]);
annotation.title = [components[2] stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet];
//** Used in first non-working solution below **
//NSMutableArray *objectToRemoveArray = [[NSMutableArray alloc] init];
//[objectToRemoveArray addObject:annotation];
//** The following three lines didn't remove any annotations from array **
//[self.favoriteAnnotationsArray removeObjectsInArray:objectToRemoveArray];
//[self.favoriteAnnotationsArray removeObject:annotation];
//[self.favoriteAnnotationsArray removeObjectIdenticalTo:annotation];
//** This only removes the last object in array and not necessarily the correct annotation to remove **
[self.favoriteAnnotationsArray removeLastObject];
}
解決策Robに感謝します。私の注釈のタイトルはすべてユニークなので、条件文を簡略化して注釈のタイトルのみをチェックし、座標はチェックしません。ところで、私はisEqualToStringに条件式の==を変更しなければなりませんでした。再度、ソリューションに感謝します。 – Cheesehead1957
Lol。私は最近スウィフトコードをあまりにも多く書いています... – Rob
@ Cheesehead1957 - ところで、あなたはたくさんの質問をしてきましたが、答えを受け入れていないようです。 「私の質問に答えたとき、私は何をすべきですか?」(http://stackoverflow.com/help/someone-answers)私があなたの答えを受け入れるかどうかは気にしませんが、おそらくそのうちの1つを受け入れるべきです。おそらくあなたの質問履歴に戻って、あなたが受け入れるべき他の質問に対する他の答えがあるかどうかを調べるべきでしょう。 – Rob