2017-10-18 18 views
-1

Je suis confronté à un problème et j'ai essayé différentes solutions mais je n'ai pas encore pu résoudre. Le problème est Instance member 'decodeJson' cannot be used on type 'Utils' sur la zone decodeJson. Comme vous pouvez le voir la classe Utils a différentes fonctions qui getDataWithURLSession, decodeJson et getDataWithURLSession besoin d'utiliser decodeJson.Le membre d'instance 'decodeJson' ne peut pas être utilisé sur le type 'Utils'

public class Utils { 

    static var ApiURL = "http://xxx" 

    var categoryList = [MangaCategory]() 

    //MARK - JSON Searilization 
    @available(iOS 10.0, *) 
    static func getDataWithURLSession(withtoken: String){ 
     guard let url = URL(string: Utils.ApiURL + "/Category/Get") else {return} 
     var request = URLRequest(url: url) 

     request.httpMethod = "POST" 
     request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
     request.setValue("Bearer " + withtoken, forHTTPHeaderField: "Authorization") 

     guard let httpBody = try? JSONSerialization.data(withJSONObject: [], options: []) else { return } 
     request.httpBody = httpBody 

     let task = URLSession.shared.dataTask(with: request) { (data, response, err) in 

      decodeJson(data: data) 
     } 
     task.resume() 
    } 

    @available(iOS 10.0, *) 
    private func decodeJson(data:Data?){ 
     guard let data = data else {return} 
     dump(data) 

     do { 
      let json = try JSONDecoder().decode(Categorys.self, from: data) 
      for manga in json.data{ 
       if json.data.count > categoryList.count 
       { 
        let cat = MangaCategory(context: CoreDataService.context) 

        cat.category_name = manga.name 
        cat.category_id = Int16(manga.id)! 

        CoreDataService.saveContext() 
        self.categoryList.append(cat) 
       } 
       else{ 
        print("JSon Serialization Es Geçildi.") 
       } 
      } 

     } catch let jsonError { 
      print("JSON Serializing error : ", jsonError) 

     } 
    } 
} 

Répondre

0

Si je suis votre problème à droite, vous essayez d'utiliser la méthode privée d'une instance de la classe utils dans la méthode de cette classe lorsque cette instance est pas définie.

Pour le résoudre, vous avez plusieurs options:

  1. les deux méthodes pour gagnez de être les méthodes d'instance (faire le premier pas statique mais public).

  2. Faire de la méthode les méthodes de classe Utils - rendre la seconde fonction statique aussi. Mais dans ce cas, vous devrez renvoyer une instance de la classe Utils dans la méthode decodeJson pour avoir la possibilité d'y stocker la variable categoryList.

Si vous décidez d'utiliser la deuxième option et aura des problèmes dans le code, laissez-moi savoir, je vais ajouter le code dans ma réponse

+0

Merci. J'ai essayé la première solution mais ne fonctionnait pas. Donc, j'ai changé le nom de la fonction 'static func getDataWithURLSession (withtoken: String) {' à 'public func getDataWithURLSession (avectoken: String) {' et 'privé func decodeJson (data: Data?) {' À ' public func decodeJson (data: Data?) -> [Any] 'et ajouté' return categoryList'. En fait mon problème de classe d'utils est résolu mais quand j'appelle la fonction de getDataWithURLSession à AppDelegate.swift j'ai vu différent problème comme 'le membre d'instance 'getDataWithURLSession' ne peut pas être employé sur le type 'Utils'; vouliez-vous utiliser une valeur de ce type à la place? ' – Guray

+0

Les deux options dépendent de l'endroit où vous allez utiliser votre objet Utils avec la propriété stockée. Pourquoi la première méthode ne fonctionne pas? Je pensais que vous aviez besoin d'un objet et remplissez-le categoryList en appelant getDataWithURLSession. Pourriez-vous afficher le code que vous utilisez dans le délégué de l'application et ailleurs. Je veux dire comment tu vas l'utiliser. Je pense que vous l'appelez comme une méthode de classe pendant que nous essayons d'en faire une instance. – Woof