Aller au contenu

Photo

Fiche 29 — Accéder à votre calendrier


  • Please log in to reply
5 replies to this topic

#1 ipodishima

ipodishima

    iPuP grand maître

  • Administrators
  • 7 436 Messages :

Posté 23 septembre 2010 - 13:48

Bonjour,

Voici la discussion officielle de la fiche n°29.

"Avec iOs4, Apple autorise l’accès au calendrier de votre téléphone pour le consulter et le modifier. Regardons tout ceci de plus près !"

Bonne lecture !
Image IPB
iPuP est aussi et surtout une société spécialisée en dev iOS •• A découvrir sur Internet, Twitter, Facebook

#2 skyrace666

skyrace666

    iPuP novice

  • Lecteur
  • 47 Messages :

Posté 16 avril 2011 - 00:04

Bonjour

Je me suis inspiré du livre afin d'afficher un calendrier, mais je cherche à afficher uniquement certains rdv, que je tri suivant le titre de la note.
Les résultats sont affichés dans un tableau, mais la seul facon que j'ai trouvé pour faire le tri est dans le UITabkeViewCell.

NSString *RES=event.title;
    NSRange range = [RES rangeOfString:@"Anniversaire"];
    if (range.location != NSNotFound) {

	cell.textLabel.text = event.title;
	cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ —> %@", startDate, endDate];
        
	}
    else
    {
  //  cell.textLabel.text = @"PASOK";
//	cell.detailTextLabel.text = @"PASOK";
    }
        
      return cell;
Malheureusement cela me renvoie des lignes vident (ce qui est normal), ce qui fait des trous.

J'ai essayé de faire mon filtre au niveau de la génération des objects, mais je n'arrive à récuperer que deux champs, soit le propriétaire du carnet ou alors les valeurs mais dans un block, je n'arrive pas a sélectionner uniquement le "title" :

- (NSMutableArray*) getEventsTodisplay {
	// on créé les dates limites pour le tri 
	CFGregorianDate gregorianStartDate, gregorianEndDate;
	// deux mois avant aujourd'hui
	CFGregorianUnits startUnits = {0, -2, 0, 0, 0, 0}; // années, mois, jours, heures, minutes, secondes
	// un mois après aujourd'hui
	CFGregorianUnits endUnits = {0, 0, 30, 0, 0, 0};
	// récupérer l'heure actuelle dans la zone où vous êtes placés
	CFTimeZoneRef timeZone = CFTimeZoneCopySystem();
	
	gregorianStartDate = CFAbsoluteTimeGetGregorianDate(CFAbsoluteTimeAddGregorianUnits(CFAbsoluteTimeGetCurrent(), timeZone, startUnits), timeZone);
	
	gregorianEndDate = CFAbsoluteTimeGetGregorianDate(CFAbsoluteTimeAddGregorianUnits(CFAbsoluteTimeGetCurrent(), timeZone, endUnits), timeZone);
	
	NSDate* startDate = [NSDate dateWithTimeIntervalSinceReferenceDate:CFGregorianDateGetAbsoluteTime(gregorianStartDate, timeZone)];
	NSDate* endDate = [NSDate dateWithTimeIntervalSinceReferenceDate:CFGregorianDateGetAbsoluteTime(gregorianEndDate, timeZone)];
	
	CFRelease(timeZone);
	

	NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:nil];
//    NSPredicate *predicate = [eventStore eventWithIdentifier:(NSString *)identifier
	//NSPredicate *predicate =      [NSPredicate predicateWithFormat:@"tagName LIKE[c] 'nyt'"]; 
	// On récupére tous les événements qui correspondent
	NSArray *events = [eventStore eventsMatchingPredicate:predicate];
    
    
	// on récupère les différents type de calendrier
	NSArray *arrayOfCalendarsWithPotentialDuplication = [events valueForKeyPath:@"calendar.title"];
	// comme il y a un risque de duplication des noms de calendriers, on utilise NSSet qui va automatiquement enlever les doublons
	NSSet *setCalendars = [NSSet setWithArray:arrayOfCalendarsWithPotentialDuplication];
	// on récupère le bon tableau sans doublons
	NSArray *arrayOfCalendars = [setCalendars allObjects];
    
  
    
	
	// on construit un tableau de dictionnaires contenant le nom du calendrier et un tableau d'événements correspondants à ce calendrier
	NSMutableArray *arrayToReturn = [[NSMutableArray alloc] init];
	// on parcourt tous les calendriers
	for (NSString *calendar in arrayOfCalendars)
	{
        
   
        
		// on cherche les événements qui ont pour titre le calendrier en cours
		// NSPredicate *predicateCalendar = [NSPredicate predicateWithFormat:@"calendar.note == %@", calendar];
        NSString *UserXX=@"utilisateur";
        NSPredicate *predicateCalendar = [NSPredicate predicateWithFormat:@"calendar.title==%@", UserXX;
    
      //  NSPredicate *predicateCalendar = [NSPredicate predicateWithFormat:@"calendar.title == %@", calendar];
   
   

        
		// on crée un nouveau tableau en utilisant ce filtre
        
		NSMutableArray *arrayOfEvents = [[events filteredArrayUsingPredicate:predicateCalendar] mutableCopy];
        
		// on crée le dictionnaire associé
       



        NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:calendar, arrayOfEvents, nil]
                                                                      forKeys:[NSArray arrayWithObjects:kCalendarName, kArrayOfEvents, nil]];
        


 

		[arrayOfEvents release]; // release à cause de mutableCopy
		// on l'ajoute dans le tableau
		[arrayToReturn addObject:dic];
	}
    
    //    NSLog(@"The content of arry is%@",arrayToReturn  );  
    // on retourne le tableau en autorelease cf Fiche mémoire
	return [arrayToReturn autorelease];
}
En fait je souhaiterai uniquement récuperer le champs title dans : kArrayOfEvents sous forme de string.

Il y a t'il une façon sinon de transformer cette valeur dans un string afin que je fasse mon test dessus et que dans ce cas je créer l'objet ?

Merci d'avance.

A bientot

#3 skyrace666

skyrace666

    iPuP novice

  • Lecteur
  • 47 Messages :

Posté 20 avril 2011 - 09:56

Bonjour,

pas d'idée ? je dois le refaire en bdd et en enregistrant l'identifiant de l'event ?

#4 skyrace666

skyrace666

    iPuP novice

  • Lecteur
  • 47 Messages :

Posté 20 avril 2011 - 15:07

J'ai resolu le pb en utilisant une bdd et en enregistrant le Eventwithidentifier, je sais pas si il y a plus simple

#5 touladi

touladi

    iPuP membre

  • Members
  • 6 Messages :

Posté 17 juin 2013 - 23:09

Message d'erreur du fichier source pris sur Github au lancement sur XCode 4.6.3:

 

 

2013-06-17 18:07:58.183 EventFromCalendar[2139:907] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UITableViewController loadView] loaded the "ViewController" nib but didn't get a UITableView.'


*** First throw call stack:


(0x315763e7 0x39271963 0x31576307 0x33448969 0x333a4451 0x333f91f7 0x333f913d 0x333f9021 0x333f8f4d 0x333f8699 0x333f8581 0x333c9561 0x333888c7 0x33134513 0x331340b5 0x33162ecf 0x334320e1 0x334312cb 0x334304af 0x33430439 0x33565cb9 0x333ee683 0x333ee3c7 0x333edd2f 0x333e4e8b 0x333e0af5 0x334221e1 0x3e1d3 0x333e5aa1 0x333e5625 0x333dd833 0x33385d1f 0x333857ad 0x333851ef 0x3509d5f7 0x3509d227 0x3154b3e7 0x3154b38b 0x3154a20f 0x314bd23d 0x314bd0c9 0x333dc46d 0x333d92b9 0x3dee5 0x3de6c)


libc++abi.dylib: terminate called throwing an exception


(lldb)



#6 CoinCoin

CoinCoin

    iPuP expert

  • Moderators
  • 559 Messages :
  • LocationSophia-Antipolis

Posté 19 juin 2013 - 08:23

Salut,

 

Apparemment tu essayes d'appeler un view controller dans ton xib au lieu d'un table view controller.

 

Si dans ton xib tu as juste un tableviewcontroller, il faut que ton .h implémente UITableViewController

 

Si dans ton xib tu as un view controller qui contient un tableviewcontroller, il faut que ton .h implémente UIViewController <UITableViewControllerDelegate, UITableViewDataSource>, que dans ton xib tu lies ton datasource et delegate de ta tableview à ton file's owner également.

 

++






0 utilisateur(s) en train de lire ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)