2017-06-16 3 views
0

il était ma question précédente pour afficher simplement les données statiques sur FSCalendar en utilisant 2 tableaux de jours présents et absents.Comment faire appel API pour ce service Web pour récupérer le tableau des dates présentes et absentes séparément dans swift?

How to change background color of events array in FSCalendar swift 3?

maintenant je veux aller chercher les dates présentes et absentes de la réponse JSON suivante dans le format de 2array nommé: défaut présent et absent à afficher sur FSCalendar selon ma question précédente.

Comment analyser la même ?. Guidez-moi s'il-vous-plaît. Merci d'avance.

{ 
    "Present": [ 
    { 
    "Student_ID": 2, 
    "LeaveLetterApplied": null, 
    "Message": null, 
    "Date": "2017-06-04T00:00:00", 
    "Notify": null, 
    "Status": "Present" 
}, 
{ 
    "Student_ID": 2, 
    "LeaveLetterApplied": null, 
    "Message": null, 
    "Date": "2017-06-05T00:00:00", 
    "Notify": null, 
    "Status": "Present" 
}], 
    "Absent": [ 
    { 
    "Student_ID": 2, 
    "LeaveLetterApplied": "", 
    "Message": "", 
    "Date": "2017-06-01T00:00:00", 
    "Notify": null, 
    "Status": "Absent" 
    }, 
    { 
    "Student_ID": 2, 
    "LeaveLetterApplied": "", 
    "Message": "", 
    "Date": "2017-06-02T00:00:00", 
    "Notify": null, 
    "Status": "Absent" 
    }, 
    { 
    "Student_ID": 2, 
    "LeaveLetterApplied": "", 
    "Message": "", 
    "Date": "2017-06-03T00:00:00", 
    "Notify": null, 
    "Status": "Absent" 
    }, 
    { 
    "Student_ID": 2, 
    "LeaveLetterApplied": "Applied", 
    "Message": "Sick Leave", 
    "Date": "2017-06-06T00:00:00", 
    "Notify": null, 
    "Status": "Absent" 
} 
], 
    "No_Of_Working_Days": 6, 
    "No_Of_Present_Days": 2, 
    "Percentage": 0 
} 

est en dessous du code de m à l'aide d'analyser:

func getdateFromJSON() 
{ 
    let url = NSURL(string: "http://ezschoolportalapi.azurewebsites.net/api/Student/AttendanceDetails?schoolid=1&studentid=1&month=1&year=2017") 
    let request = NSMutableURLRequest(url: url! as URL) 
    let task = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) 
     in 
     guard error == nil && data != nil else 
     { 
      print("Error:",error) 
      return 
     } 
     let httpstatus = response as? HTTPURLResponse 
     if httpstatus?.statusCode == 200 
     { 
      if data?.count != 0 
      { 
       let responseString = try! JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! NSDictionary 
       let presentdetails = responseString["Present"] as? [[String:AnyObject]] 
       let absentdetails = responseString["Absent"] as? [[String:AnyObject]] 
       print(absentdetails) 
       print(presentdetails) 
       // dont know what to do next :(

       } 

      else 
      { 
       print("No data got from URL") 
      } 
     } 
     else{ 
      print("error httpstatus code is :",httpstatus?.statusCode) 
     } 

    } 
    task.resume() 

} 

capture d'écran Appearance

Error Log:

2017-06-17 10:23: 50.671 ezSchool [1848: 24475] - [UICachedDeviceWhiteColor unsignedLongLon gValue]: sélecteur non reconnu envoyé à l'instance 0x608000059ec0 2017-06-17 10: 23: 50.672 ezSchool [1848: 24475] Échec de la définition de la propriété (placeholderType) contrôlée par l'utilisateur sur (FSCalendar): - [UICachedDeviceWhiteColor unsignedLongLongValue]: sélecteur non reconnu envoyé à l'instance 0x608000059ec0 2017-06-17 10: 23: 50.672 ezSchool [1848: 24475] - [UICachedDeviceWhiteColor unsignedLongLongValue]: sélecteur non reconnu envoyé à l'instance 0x608000059ec0 2017-06-17 10: 23: 50.672 ezSchool [1848: 24475] Échec pour définir (firstWeekday) la propriété inspectée définie par l'utilisateur sur (FSCalendar): - [UICachedDeviceWhiteColor unsignedLongLongValue]: sélecteur non reconnu envoyé à l'instance 0x608000059ec0 2017-06-17 10: 23: 50.672 ezSchool [1848: 24475] - [UICachedDeviceWhiteColor doubleValue]: non reconnu sélecteur envoyé à l'instance 0x608000059ec0 2017-06-17 10: 23: 50.673 ezSc hool [1848: 24475] Impossible de définir (headerHeight) la propriété contrôlée par l'utilisateur définie sur (FSCalendar): - [UICachedDeviceWhiteColor doubleValue]: sélecteur non reconnu envoyé à l'instance 0x608000059ec0 2017-06-17 10: 23: 50.673 ezSchool [1848: 24475] - [UICachedDeviceWhiteColor doubleValue]: sélecteur non reconnu envoyé à l'instance 0x608000059ec0 2017-06-17 10: 23: 50.673 ezSchool [1848: 24475] Échec de la définition de la propriété (headerTitleTextSize) contrôlée par l'utilisateur sur (FSCalendar): - [UICachedDeviceWhiteColor doubleValue]: Sélecteur non reconnu envoyé à l'instance 0x608000059ec0 Erreur: Facultatif (Domaine d'erreur = Code NSURLErrorDomain = -1002 "URL non prise en charge" UserInfo = {NSUnderlyingError = 0x60000005cbc0 {Domaine d'erreur = kCFErrorDomainCFNetwork Code = -1002 "(null)"}, NSErrorFailingURLStringKey = ezschoolportalapi.azurewebsites .net/api/Etudiant/AttendanceDetails? SCHOOLID = 1 = 2 & StudentID & mois = 6 & année = 2017, NSErrorFailingURLKey = ezschoolportalapi.azurewebsites.net/api/Etudiant/AttendanceDetails? SCHOOLID = 1 = 2 & StudentID & mois = 6 & année = 2017, NSLocalizedDescription = URL} non pris en charge)

+0

Qu'est-ce que vous voulez, vous attendez deux tableau de chaînes avec la date au format '2017-06-02'? –

+0

oui toutes les dates de présent et absent dans deux tableaux différents comme je l'ai montré dans ma question précédente. – BugFinder

+0

hey Nirav que dois-je faire dans cette méthode suivante de FSCalendar. filldefaultcolorsfor comme je l'implémente dans ma question précédente? – BugFinder

Répondre

0

Ne pas utiliser NSDictionary dans Swift, il vous suffit d'utiliser DateFormatter pour obtenir votre date formatée. Le dictionnaire JSON correct dans Swift 3 est également [String:Any]. Tout d'abord, déclarez deux propriétés d'instance de votre classe de type [String] nommées presentDateArray et absentDateArray.

var presentDateArray = [String]() 
var absentDateArray = [String]() 

Maintenant, initialisez ces deux tableaux dans votre bloc d'achèvement de réponse de cette façon.

if let responseJSON = (try? JSONSerialization.jsonObject(with: data!, options: .allowFragments)) as? [String:Any], 
    let presentdetails = responseJSON["Present"] as? [[String:Any]], 
    let Absentdetails = responseJSON["Absent"] as? [[String:Any]] { 

    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss" 
    self.presentDateArray = presentdetails.flatMap { dateFormatter.date(for: $0["Date"] as! String) }.flatMap { dateFormatter1.string(from:$0) } 
    self.absentDateArray = Absentdetails.flatMap { dateFormatter.date(for: $0["Date"] as! String) }.flatMap { dateFormatter1.string(from:$0) } 
    DispatchQueue.main.async { 
     calendar.reloadData() 
    } 
} 

Maintenant, il suffit d'utiliser ce tableau à deux dans votre délégué de la méthode de

func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, titleDefaultColorFor date: Date) -> UIColor? { 

    let datestring2 : String = dateFormatter1.string(from:date) 

    if presentDateArray.contains(datestring2) { 
     return UIColor.green 
    } 
    else if presentDateArray.contains(datestring2) { 
     return UIColor.red 
    } 
    else { 
     return nil 
    } 
} 
+0

ok merci mon pote va mettre à jour mon code selon votre réponse et vous le faire savoir. :) – BugFinder

+0

@BugFinder Ok Attendra votre réponse –

+0

et qu'en est-il de l'effet de couleur? vérifier la méthode d'apparence dans ma question précédente ici https://stackoverflow.com/questions/44581620/how-to-change-background-color-of-events-array-in-fscalendar-swift-3/44581711?noredirect=1 # comment76165119_44581711 – BugFinder