2015-03-13 4 views
1

я столкнулся проблемы при сохранении MKMapItem, что я был в состоянии решить, глядя на предупреждения компилятора, но я не понимаю, почему я был в состоянии решить, или, если я использовал " лучшие практики".Сохранение CLLocationCoordinates в Core Data

У меня есть объектная модель, которая хранит координаты широты и долготы от MKMapItem отдельно как double s в NSManagedObject. Когда я иду в Editor\Create NSManagedObject Subclass и создать свой класс, заголовок выглядит следующим образом:

@class LocationCategory; 

@interface PointOfInterest : NSManagedObject 

@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) NSString * address; 
// Xcode spat out NSNumber instead of the double specified in the model setup screen 
@property (nonatomic, retain) NSNumber * latitude; 
@property (nonatomic, retain) NSNumber * longitude; 
@property (nonatomic, retain) NSString * note; 
@property (nonatomic, retain) LocationCategory *locationCategory; 

@end 

Все было хорошо, пока я не попробовал добавить объект в моей managedObjectContext я получил эти предупреждения:

Assigning to 'NSNumber *' from incompatible type 'CLLocationDegrees' (aka 'double') 

на эти строки:

newPOI.latitude = self.item.placemark.location.coordinate.latitude; 
newPOI.longitude = self.item.placemark.location.coordinate.longitude; 

Я установил ее, изменив мой PointOfInterest : NSManagedObject подкласс:

@property (nonatomic) double latitude; 
@property (nonatomic) double longitude; 

Это лучший способ сделать компилятор счастливым или есть лучший способ?

+1

Ваше решение является вполне разумным и действительным. На самом деле, нет необходимости менять его или беспокоиться о том, что вы делаете что-то неправильно, это хорошее решение как есть. –

ответ

1

Я хотел бы предложить вам изменить свойства вашего PointOfInterest подкласса обратно NSNumber, а затем изменить назначение широты и долготы следующим образом:

newPOI.latitude = [NSNumber numberWithDouble:self.item.placemark.location.coordinate.latitude]; 
newPOI.longitude = [NSNumber numberWithDouble:self.item.placemark.location.coordinate.longitude]; 

Тогда, когда вы хотите использовать широту:

self.item.placemark.location.coordinate.latitude = [newPOI.latitude doubleValue]; 

и т.д.

+0

Большое вам спасибо! Мое «решение» почувствовало себя немного вынужденным/взломанным. Я рад, что у меня был вопрос, потому что я чему-то научился. Еще раз спасибо. – Adrian

+1

@AdrianB Рад, что я мог бы помочь. Получайте удовольствие от своего проекта! – Steve

+0

@Steve, можете ли вы пояснить, почему вы предлагаете * не использовать скаляры? Скаляры поддерживались на подклассах управляемого объекта в течение довольно длительного времени. «Решение» автора использовало скаляры и было совершенно правильным. – quellish

Смежные вопросы