Ошибка сетевого запроса API на iOS устройстве, а не симуляторе - PullRequest
0 голосов
/ 21 июня 2020

хорошо, я уже 2 дня пытаюсь решить эту проблему, надеясь, что кто-то может помочь.

краткая справка, я делаю запрос api для данных. используя функцию, которая вызывает созданную мной служебную функцию. теперь все работает хорошо при первой загрузке, collectionview загружается нормально. в какой-то момент я запускаю еще один звонок для получения дополнительных данных. принять сейчас я получаю ошибку URL. Это не работает на моем iphone, но отлично работает на симуляторе, поэтому не уверен, что это может быть. Вот сервисная функция, которая делает запрос api:

func fetchYoutubeData(interest: String, maxResult: Int, pageToken: String, completion: @escaping(Result<Youtube, WHError>) -> Void) {
    let urlString = baseYoutubeURL+interest+youtubeAPIKey+"&maxResults=\(maxResult)&pageToken=\(pageToken)"
    guard let url = URL(string: urlString) else {
      completion(.failure(.URLError))
      return
    }
    let session = URLSession.shared
    let task = session.dataTask(with: url) { (data, _, error) in
      if let _ = error {
        completion(.failure(.DataError))
        return
      }
      guard let data = data else { return }
      do {
        let result = try JSONDecoder().decode(Youtube.self, from: data)
        print(result)
        completion(.success(result))
      } catch {
        completion(.failure(.JSONError))
      }
    }
    task.resume()
  }

вот моя функция контроллера, которая вызывает сервис и обрабатывает данные по завершении:

func fetchNewData(maxResult: Int, pageToken: String) {
    guard let interest   = self.interest.text else { return }
    print(pageToken)
    NetworkServices.shared.fetchYoutubeData(interest: interest, maxResult: maxResult, pageToken: pageToken) { [unowned self] (result) in
      switch result {
      case .success(let youtubeGroup):
        let items = youtubeGroup.items
        self.youtubeData.items.append(contentsOf: items)
        DispatchQueue.main.async {
          self.horizontalCollectionView.reloadData()
        }
      case .failure(let error):
        print("DOES GET ERROR")
        print(error)
      }
    }
  }

снова он отлично работает на симуляторе, но не на моем устройстве, я могу получить первый вызов на работу, но после этого, как только я использую pageToken для получения дополнительных данных, я получаю ошибку URL.

любая помощь будет серьезно оценена

1 Ответ

0 голосов
/ 21 июня 2020

так что, конечно, как и многие вещи, я пропустил кое-что маленькое. Я оставлю вопрос здесь на случай, если кто-то окажется в подобной ситуации. проблема была в первом запросе, я переформатировал "интерес", чтобы удалить пробелы из строки и заменить их на +. вам нужно сделать это для предоставленной вами строки запроса API Youtube. Я сделал это в первом запросе, но для моего запроса дополнительных данных я забыл переформатировать запрос в отдельном вызове. к счастью, простое исправление

...