在我的mapview中,用戶可以通過點擊屏幕製作他自己的地圖別針。他可以設置多個引腳。但是,我的保存代碼只保存了他所做的最後一個引腳,而不是以前的引腳。我怎樣才能讓它保存以前的呢?如何使用此代碼保存多個MapAnnotations?
- (void)addPinToMap:(UIGestureRecognizer *)gestureRecognizer
{
if (gestureRecognizer.state != UIGestureRecognizerStateBegan)
return;
CGPoint touchPoint = [gestureRecognizer locationInView:self.mapView];
CLLocationCoordinate2D touchMapCoordinate =
[self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView];
NSMutableArray *pincoords = [[NSMutableArray alloc] init];
CLLocationCoordinate2D coordinate = { touchMapCoordinate.latitude, touchMapCoordinate.longitude };
[pincoords addObject:[NSValue valueWithBytes:&coordinate objCType:@encode(CLLocationCoordinate2D)]];
MapAnnotation *toAdd = [[MapAnnotation alloc]init];
toAdd.coordinate = touchMapCoordinate;
toAdd.title = @"Svampe Spot";
[self.mapView addAnnotation:toAdd];
//Save pin section..
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:pincoords forKey:@"saveCoords"];
[userDefaults synchronize];
}
編輯:所以我做了一些改變。我做了一個NSMutable數組並添加了座標。但是,由於這個原因,應用終止了:[NSUserDefaults setObject:forKey:]:嘗試插入非屬性列表對象。
每次我嘗試添加座標到可變數組我似乎得到這個消息,我做錯了什麼?
作爲'setObject:forKey:'的文檔說,對象必須是NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary。 NSValue不被支持,所以你得到這個錯誤。如答案所示,將座標包裝在NSDictionary中,將字典添加到數組中,然後保存該數組。另外請注意,如果你只想在NSUserDefaults中不存在的話,你只想分配+ init數組(如果不存在的話),否則你將再次只存儲最後一個引腳。 – Anna