2012-12-24 6 views
12

Sto provando a ottenere dati di nascita per i contatti ma se l'utente non sceglie l'anno o il contatto proviene da Facebook e l'anno oi dati sono nascosti in modo da darmi il valore "1604" per l'anno che puoi vedere cosa intendo nell'immagine.NSDate restituisce "1604" per il valore dell'anno?

enter image description here

enter image description here

risposta

20

Congratulazioni, hai scoperto un dettaglio di implementazione!

Prima di tutto, Contatti memorizza le date come punti nel tempo ed è impossibile memorizzare un punto nel tempo senza un anno, poiché ogni punto nel tempo ha un anno. Pertanto, è stato necessario prendere una decisione su come la Rubrica memorizzerebbe un anno "sconosciuto" in una data. È stato deciso che "1604" sarebbe stato un bene l'anno, per diverse ragioni:

  1. Quando si parla di Address Book, è improbabile che avrete chiunque nella tua rubrica che è nato nel 1604
  2. 1604 era un anno bisestile (secondo le regole di come vengono calcolati gli anni bisestili), il che significa che se la persona di cui non si conosce l'anno di nascita è nata il 29 febbraio, allora anche il 1604 potrebbe gestirlo.
  3. 1604 era prima dell'interruttore calendario giuliano-gregoriano.

Pertanto, se si stanno tranciando le date di nascita dalla Rubrica, sarà necessario il caso speciale 1604 come "data di nascita in cui l'anno è sconosciuto".

Nota: per quanto ne so, questo è supportato solo quando si ha a che fare con il calendario gregoriano. Per tutti gli altri calendari, questo comportamento non è definito.

+1

così posso verificare se è uguale a "1604" il formato sarà solo setDateFormat: @ "MM- dd " – Omarj

+2

@Omarj sì. È possibile estrarre l'anno utilizzando un 'NSCalendar' gregoriano' per ottenere il' NSDateComponents' appropriato. –

2

È possibile init l'anno in viewDidLoad.

Oppure controllare se l'anno non è stato scelto dall'utente, presente messaggio di errore.

+1

ok ma questo selettore per nativo aggiunge un nuovo contatto ??? e che dire del contatto provengono da Facebook ?? – Omarj

+2

Devi controllare se hai l'anno diverso dal 1604, e se è così, chiedi all'utente di compilare questo dettaglio fuori – Luda