Хранилище ядра iOS: обратные вызовы ListObjectObserver не запускаются после транзакции.Удалить все

#ios #corestore

Вопрос:

После использования transaction.deleteAll внутри асинхронного я больше не получаю никаких ListObjectObserver событий.

Поэтому в следующем фрагменте кода после извлечения любой новой страницы из API я добавляю новые элементы в базу данных. Но как только мне нужно перезапустить разбиение на страницы со страницы 1, я хочу удалить все избыточные данные (это контролируется флагом forceRefresh). Эта операция, похоже, выполняется успешно, что означает, что я получаю listMonitorDidChange вызов обратного вызова, который меня интересует. Но все последующие вставки с данными новых страниц больше не вызывают никаких ListObjectObserver обратных вызовов.

Мне нужен какой-то намек, чтобы выяснить, что может вызвать проблему, потому что до сих пор я очень расстроен этим. Большое спасибо!

Database.stack.выполнить( асинхронно: { транзакция -gt; (Состояние синхронизации, [Пользователь]?) в

 var modified: Bool = false  var r_users: [User] = []    // For all successful results.  let apiUsers: [APIMinimalUserProfile] = apiResponse.users.values()  for apiUser in apiUsers {  // UPDATE: User exists already by Id.  if let t_user: User = try! transaction.fetchOne(by: apiUser.id) {  // User get's update.  let result = t_user.update(from: apiUser, in: transaction)  if case .done = result {  modified = true  } else if case .failed(_) = result {  t_user.refreshAndMerge()  }   // Return this instance.  r_users.append(t_user)  } else {  // CREATE: User not exists yet.  let (result, t_user) = User.make(from: apiUser, in: transaction)  if case .done = result, let t_user = t_user {  modified = true   // Return this instance.  r_users.append(t_user)  }  }  }    if (forceRefetch) { // if `forceRefetch` is true then we delete all but the first page items   var ids = r_users.map { $0.id }  ids.append(me.user.id)  if try transaction.deleteAll(Fromlt;Usergt;(), notIn: ids) gt; 0 {  modified = true  }  }    return (modified ? .ok : .notModified, r_users)  },  success: { status, r_users in  self.workerQueue.async {  // Try store header data for later If-Modified-Since and If-None-Match requests. Or remove stored data if no suitable headers are present.  try? self.record(ConditionalHeaders(headers), for: requestId)    // Pass the objects as is, they have to be refetched before using them outside the transaction.  completeResponse(status, r_users, apiResponse.total)  }  },  failure: { error in  print(error)  self.workerQueue.async {  completeResponse(.failure(error), nil, apiResponse.total)  }  }  )