Результат запроса выборки Coredata удваивается после каждого запроса - PullRequest
2 голосов
/ 26 апреля 2019

Я использую основные данные для хранения своих основных данных и их обновления на основе представления взаимодействия с пользователем UI, связанного с тем же.

Сначала я выбираю некоторые данные в SignupStepperVC, используя следующий методи передать его в SignupGroupVC, который встроен в UIContainerView внутри SignupStepperVC.

Так что мой код в SignupStepperVC будет:

self.arrSubCategory = TblSubCategory.fetchSubCategories()

, где fetchSubCategories() - это классметод TblSubCategory, который будет извлекать все sub-categories из сущности и возвращаться к VC, где его вызовут.

@nonobjc public class func nsFetchRequest() -> NSFetchRequest<TblSubCategory> {
    return NSFetchRequest<TblSubCategory>(entityName: "TblSubCategory")
}

class func fetchSubCategories() -> [TblSubCategory]? {

    let fetchRequest = TblSubCategory.nsFetchRequest()
    fetchRequest.sortDescriptors = [NSSortDescriptor(key: "sName", ascending: true)]

    do {
        let arrSubCategories = try AppDelegate.shared.persistentContainer.viewContext.fetch(fetchRequest)
        return arrSubCategories

    } catch {
        Logger.error("TblSubCategory - \(error.localizedDescription)")
        return nil
    }
}

TblSubCategory имеет следующие свойства:

@NSManaged public var bIsSelected           : Bool
@NSManaged public var nId                   : Int16
@NSManaged public var nMainCategoryId       : Int16
@NSManaged public var nIsActive             : Int16
@NSManaged public var nGroupId              : Int16
@NSManaged public var sName                 : String?
@NSManaged public var sImage                : String?

Сейчасиспользуя ссылку 'RegistrationGroupVC', я передаю ей массив подкатегории.

self.refSignupGroupVC?.arrSubCategory = self.arrSubCategory

В SignupGroupVC у меня есть список групп, поэтому при выборе любой группы, связанной с этимГруппа «Вся категория» будет отображаться в SignupFirstStepVC.

self.signupFirstStepVC?.arrSubCategory = arrSubCategory?.compactMap { $0.copy() } as? [TblSubCategory]

В SignupFirstStepVC у меня есть список всех TblSubCategory, которые отображаются в виде коллекции.Поэтому при выборе любого элемента из него он будет выбран, и для bIsSelected будет установлено значение true, и при повторном выборе будет установлено значение «ложь».

Код в RegistrationFirstStepVC

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {        
    self.arrSubCategory![indexPath.item].bIsSelected = !self.arrSubCategory![indexPath.item].bIsSelected
    collectionView.reloadData()
}

Используя делегат, я передам массив выбранной подкатегории в SignupGroupVC.

Это поток кода, где я сталкиваюсь с некоторой проблемой.

Итак, когдаЯ возвращаюсь на главный экран и снова захожу на SignupStepperVC, снова есть вызов метода для получения подкатегории.

Итак, проблема в том, что в базе данных только 20 записей, но когда я вхожу во второй раз в SignupStepperVC и получаю sub-categories.Я получаю 40 записей.Я снова следую вышеперечисленным шагам и возвращаюсь на главный экран, возвращаюсь к SignupStepperVC и извлекаю sub-categories из базы данных, получая 57 записей.Это случайно.

Итак, это постоянно увеличивающееся количество записей, даже в базе данных всего 20 записей.

Пожалуйста, помогите мне решить эту проблему.

...