2017-09-03 6 views
0

im vraiment nouveau rapide et sans votre aide, je ne peux pas aller de l'avant les garsDiscordance entre les données JSON et les classes que j'ai fait

quelqu'un peut-il s'il vous plaît me dire comment puis-je corriger cette erreur?

i mettre l'image d'erreur ci-dessous

import UIKit 
import Alamofire 
import SwiftyJSON 

class AppCategory : NSObject { 

    var name : String? 
    var apps : [App]? 
    var type : String? 



     override func setValue(_ value: Any?, forKey key: String) { 
      if key == "apps " { 
       var apps = [App]() 
       for dict in value as! [[String:AnyObject]] { 
        let app = App() 
        app.setValuesForKeys(dict) 
        apps.append(app) 
       } 

      }else{ 
       super.setValue(value, forKey: key) 
      } 
     } 
static func fetchFeaturedApps (completionHandler : @escaping ([AppCategory]) ->()) { 


     let urlRequest = URLRequest(url:URL(string: "http://www.statsallday.com/appstore/featured")!) 

      URLSession.shared.dataTask(with: urlRequest as URLRequest) { (data, response, error) -> Void in 

       if error != nil { 
        print(error!) 
        return 
       } 

       do { 
        let json = try(JSONSerialization.jsonObject(with: data!, options: .mutableContainers)) as! [String : Any] 

        var appCategories = [AppCategory]() 

        for dict in json["categories"] as! [[String:Any]]{ 
         let appcategory = AppCategory() 
         appcategory.setValuesForKeys(dict) 
         appCategories.append(appcategory) 
        } 
        DispatchQueue.main.async { 
         completionHandler(appCategories) 
        } 


       }catch let err { 
        print(err) 
       } 



      }.resume() 

     } 

ici est ma classe

class App : NSObject { 

    var Id : NSNumber? 
    var Name : String? 
    var ImageName : String? 
    var Category : String? 
    var Price : NSNumber? 

} 

the JSON link

c'est un auj qui devrait passer en arrière cellule, mais me donne la désadaptation sur NSArray erreur

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! AppCell 

      cell.apps = appCategory?.apps?[indexPath.item] 

     return cell 

    } 

je ne sais pas comment FindOut quels types ne sont pas correspondent à

+0

S'il vous plaît inclure les codes et les informations pertinentes dans votre question sous forme de texte. – OOPer

Répondre

0

pour la deuxième erreur

vérifier cette ligne if key == "apps " { supprimer l'espace dans les applications de mot

vous devez utiliser ce

for dict in json["categories"] as! [[String:Any]]{ 

    } 

// Any est un alias pour n'importe quel type de données. // AnyObject est un alias pour tout type de données dérivé d'une classe.

mais il vaut mieux l'écrire

guard let categories = json["categories"] as? [[String:Any]] else { 
     return 
    } 

    for dict in categories { 

    } 

enter image description here

+0

maintenant je reçois cette erreur: erreur irrécupérable: l'élément NSArray n'a pas réussi à correspondre au type d'élément Swift Array (lldb) –

+0

@michealwoods vérifier l'image ci-dessus, vous verrez toutes les données sans aucun problème, il suffit de partager où est l'erreur –

+0

j'ai modifié mon message –