2016-11-09 54 views
0

我想在NSUserDefaults中保存我的MKPolyline和MKPolygon視圖。我有,我已經實現了一個模型:無法使用NSCoding編碼MKPolyline或MKPolygon

-(id)initWithCoder:(NSCoder *)aDecoder 
- (void)encodeWithCoder:(NSCoder *)aCoder 

然而,每當我試圖編碼我MKPolyLine我得到一個錯誤:

-[MKPolyline encodeWithCoder:]: unrecognized selector sent to instance 

我設置了所有異常斷點並停止在該行:

[aCoder encodeObject:self.layerData forKey:@"layer"]; 

爲layerData的屬性是:

@property (strong, nonatomic) MKPolyline *layerData; 

爲什麼這可能發生的任何想法?

+0

爲了將'initWithCoder:/ encodeWithCoder:'保存到'NSUserDefaults'中(即將其轉換爲NSData),您需要遵循NSCoding類。那麼,MKPolyline不符合NSCoding。你可以做什麼,而不是,是保存點或座標(論文應該很容易保存),並從他們重建了MKPolyline。 – Larme

回答

1

雖然您可以爲MKPolyline實現NSCoding,並且您可以創建一個NSData表示形式並將其存儲在NSUserDefaults中,NSUserDefaults可以以鍵值形式存儲在NSUserDefaults中。

構建陣列如果你有一個單行或多個陣列,並與各自的鍵/值使得它們形成一個字典約束力。其中有每個點的x和y值,並將其存儲在NSUserDefaults中。

加載默認值時,獲取數組,如果有多個MKPolyline,則在單行和字典的情況下遍歷單個數組。然後用點重新創建MKPolyline。

+0

啊,我只是將我的註釋CLLocationCoordinate2D的陣列CLLocation。我只需要遍歷我存儲的CLLocation項的數組並進行轉換。似乎工作得很好。我給了你信用,因爲你的回答幫助我找到了解決方案。謝謝! –