2013-02-18 38 views
3

我的iOS應用程序需要在NSUserDefault中存儲MKPolyline。我已經做了很多的研究,我現在知道:在NSUserDefaults中將MKPolyline另存爲NSData

  • 是NSUserDefaults的NSCoder
  • MKPolyline的一個子類是不NSCoder

的子類,因此,它是很難將折線保存到。我已經嘗試了MKPolyline轉換爲NSData的:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:routeLine]; // routeLine is an MKPolyline 
[defaults dataForKey:@"key"]; 
[defaults synchronize]; 

當我嘗試改變連接線的NSData的轉換,我收到此錯誤信息:

終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,原因:「 - [MKPolyline encodeWithCoder:]:無法識別選擇使用MKPolylineView時如何發送到實例0xba1fd70

我可以成功地進行上述代碼永遠那麼我有問題讓MKPolyline退出視圖。我發現this Q/A on SO,但它不能解決我的問題,因爲它會改變我的應用程序的功能。

如何保存MKPolyline?我可以繼承它嗎?如果是這樣的話會發生什麼?或者有沒有辦法與MKPolylineView做到這一點?我是否錯過了NSCoder?

回答

4

雖然你可以自己實現NSCodingMKPolyline,然後構建一個NSData表示和存儲在NSUserDefaults,它可能是更好的代表MKPolyline使用數組和字典,這NSUserDefaults可直接處理。

構建體,其封裝所述X和Y值對於每個點字典的陣列,並存儲NSUserDefaults代替MKPolyline

加載默認值時,獲取數組,循環遍歷重建點的字典,然後重新創建MKPolyline

+2

作爲一個方面說明,實現這個最好的方法可能是'MKPolyline'上的一個類別。 – bdesham 2013-02-18 15:09:30

+0

當然,像'-arrayValue'和'-initWithPointArray:'。 – paulmelnikow 2013-02-18 15:11:41

相關問題