2014-01-25 24 views
1

在我的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:]:嘗試插入非屬性列表對象。

每次我嘗試添加座標到可變數組我似乎得到這個消息,我做錯了什麼?

+0

作爲'setObject:forKey:'的文檔說,對象必須是NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary。 NSValue不被支持,所以你得到這個錯誤。如答案所示,將座標包裝在NSDictionary中,將字典添加到數組中,然後保存該數組。另外請注意,如果你只想在NSUserDefaults中不存在的話,你只想分配+ init數組(如果不存在的話),否則你將再次只存儲最後一個引腳。 – Anna

回答

0

每次你寫一個新的引腳到用戶默認值時,它會覆蓋舊的引腳。相反,將NSArray或NSMutableArray編寫爲用戶默認值並添加/刪除引腳。

更新: 首先,NSMutableArray需要從用戶的默認值,而不是alloc/inited複製。這樣一來,陣列將已經包含了以前在它保存點:

NSMutableArray *pincoords = (NSMutableArray *)[[NSUserDefaults standardUserDefaults] objectForKey:@"saveCoords"]; 

這將返回一個可變數組與您以前保存的座標。

至於你用來在數組中存儲座標的方法,我認爲你有正確的想法,但我個人從來沒有這樣做過。 NSArrays只能存儲對象,並且CLLocationCoordinate2D不是一個對象(可能是像NSRect這樣的C結構,我以前從未使用它)。它需要轉換爲符合NSCoding的對象,例如NSString,NSNumber或NSDictionary。你可以做的是創建一個函數來手動輸入座標值(包裝在一個NSNumber中)到一個NSDictionary中(使用諸如@「Lat」和@「Long」的鍵作爲座標),然後將NSDictionary存儲在你的mutable陣列。

+0

我試圖做一個MutableArray,並添加了我的針腳,但每次我得到一個「無法插入屬性」的錯誤。 – user3219713

+0

請將您的代碼插入到可變數組中。 user2105505的建議應該有效。 –

+0

好的,我對上面的代碼做了一些修改,包括一個可變數組,以及我如何用nsuserdefaults來存儲它。 – user3219713