Я добавляю основные данные в свое приложение для iPad. Моя общая процедура состоит в том, чтобы протестировать код, поместив его в делегат приложения. Когда я удовлетворен тем, что код проанализирован правильно, я перемещаю его в соответствующий метод в другом месте приложения. До сих пор это работало с добавлением объектов. Но у меня проблемы с удалением объектов. Я могу удалить их из делегата приложения, выбрав и удалив их, и прямо сейчас я удаляю их все при запуске приложения, просто чтобы поддерживать чистоту базы данных, пока у меня не будет работать основной код данных.
Итак, хватит моего рабочего процесса. Проблема, с которой я сталкиваюсь сейчас, заключается в удалении объекта из соответствующего места. Давайте посмотрим, смогу ли я кратко описать свою установку.
У меня есть два класса, назовем их Car
и Tire
ради этого обсуждения. Я не знаю, что такое соглашение, поэтому я придумал свое, а именно добавить C_
в начало имени связанных объектов Core Data для хранения объектов, связанных с этими объектами. Итак, у меня есть два дополнительных класса, C_Car
и C_Tire
. У каждой машины может быть несколько шин, поэтому Car
имеет свойство tires
, которое является NSSet
из Tire *
. Кроме того, Car
имеет свойство CarCD
типа C_Car *
, а Tire
имеет свойство TireCD
типа C_Tire *
, так что каждый объект может отслеживать связанный с ним объект основных данных (CD предназначен для основных данных).
Xcode создает удобные методы для добавления или удаления объектов. Среди них метод добавления шины к автомобилю. Я использую это таким образом:
tire.tireCD = tireCD; //tire is an object of type Tire *, and tireCD is an object of type C_Tire *.
[self.carCD addTireObject:tireCD];//self.carCD is a property in my view controller of type CarCD *, and tireCD is a local object of type TireCD *.
Кроме того, есть удобный способ снять шину с автомобиля - (void)removeTireObject:(C_Tire *)value;
. Я понял, что везде в моем контроллере представления, где у меня было:
[tireObject removeFromSuperview];//tireObject is a (Tire *) object.
Я бы просто изменил это на:
[carObject removeTireObject:tireObject.tireCD];
[tireObject removeFromSuperview];
Первая строка должна удалить объект из NSSet
основного объекта данных. Вторая строка удаляет объект из объекта автомобиля, используемого в приложении.
Проблема в том, что я не вижу никакого SQL, генерируемого в окне отладчика, когда этот код выполняется. Я что-то упускаю?
Кроме того, если вы хотите прокомментировать соглашения об именах, сейчас самое время для меня принять то, что является общепринятым.
deleteObject:tire
автоматически удалит шину из объекта автомобиля, если для правила удаления основных данных установлено значение Nullify.) - person Martin R   schedule 29.06.2013[carObject removeTireObject:tireObject.tireCD];
. - person Victor Engel   schedule 29.06.2013