Я новичок в Core Data и написал небольшое тестовое приложение. То, что я пытаюсь сделать, это иметь объект, который я могу сохранить в базе данных sqlite.Создание инициализатора для объектов Core Data
Мои свойства выглядеть следующим образом:
@property (nonatomic, retain) NSString * address;
@property (nonatomic, retain) NSString * city;
@property (nonatomic, retain) NSNumber * latitude;
@property (nonatomic, retain) NSNumber * longitude;
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * notes;
@property (nonatomic, retain) NSString * state;
@property (nonatomic, retain) NSString * street;
@property (nonatomic, retain) NSString * zip;
Это все @dynamic в файле .m.
Первоначально я сделал это:
+ (AddressAnnotation *)initWithPlacemark:(CLPlacemark *)placemark inContext:(NSManagedObjectContext *)context {
AddressAnnotation *anAddress = [NSEntityDescription insertNewObjectForEntityForName:@"AddressAnnotation" inManagedObjectContext:context];
anAddress.address = placemark.subThoroughfare;
anAddress.street = placemark.thoroughfare;
anAddress.city = placemark.locality;
....
return anAddress;
}
Однако, я не знаю, как переопределить
для протокола поэтому моя выноска получает показано. Один из них выглядит следующим образом:
- (NSString *)title {
if (self.name) {
return self.name;
}
else {
return @"";
}
}
Субтитры довольно похожи, но с другими свойствами. Однако это не работает, поскольку они предназначены для экземпляров, а не для объекта класса.
Так что я изменил мою инициализатору выглядеть следующим образом:
- (AddressAnnotation *)initWithPlacemark:(CLPlacemark *)placemark inContext:(NSManagedObjectContext *)context {
AddressAnnotation *anAddress = [NSEntityDescription insertNewObjectForEntityForName:@"AddressAnnotation" inManagedObjectContext:context];
NSLog(@"placemark: %@", [placemark description]);
anAddress.address = placemark.subThoroughfare;
anAddress.street = placemark.thoroughfare;
...
return anAddress;
}
Однако, когда я делаю это, все мои ценности равны нулю. Каков правильный способ записи инициализатора в этой ситуации? Благодаря!
Часть, которая показалась мне забавной. Когда я использую метод класса + для создания своего объекта, когда метод viewForAnnotation: вызывается, когда я помещаю булавку на карту, выдается окно. Когда я использую метод - instance, выноска не отображается, поскольку значение .name равно null. Мысли? Благодаря! – Crystal