Я в процессе добавления основных данных в свое приложение для 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 был сгенерирован в окне отладчика при выполнении этого кода. Я что-то упускаю?
Кроме того, если вы хотите прокомментировать соглашения об именах, сейчас пришло время принять все, что условно.
Используя po для запроса объекта CarCD, я вижу, что удаление действительно происходит. Я считаю, что моя ошибка в том, что я не удалял объект TireCD, удаляя его только ссылку с объекта CarCD. –
Я не понимаю, почему у вас есть 2 набора классов (Car/Tire и C_Car/C_Tire). Достаточно одного подкласса управляемого объекта для каждого объекта. –
Не все свойства автомобиля и шины необходимо сохранить в основных данных. C_Care и C_Tire содержат только те свойства, которые необходимо сохранить. Другие свойства Car и Tire необходимы в приложении, но не в основных данных. Я надеюсь, что в этом есть смысл. –