2010-08-07 6 views
1

Je suis plongé dans le développement iOS et le langage Objective C et je construis une application de réveil pour me familiariser avec le SDK et la langue. J'ai un objet NSString qui représente une heure, avec la plage "1:00 am" à "12:59 am". J'ai besoin de convertir ce NSString en deux NSInteger qui contiennent la valeur de l'heure et la valeur minute. Comme je le fais, je trouve la manipulation NSString que je fais pour être extrêmement laborieux et il se sent juste comme du code bâclé.Comment convertir une représentation NSString d'une valeur temporelle en deux NSInteger contenant l'heure et la minute?

Existe-t-il un moyen simple d'extraire les caractères des heures et des minutes d'une représentation NSString d'une valeur de temps et de stocker leurs valeurs numériques dans deux NSInteger?

Merci d'avance pour toute votre aide! Je vais y revenir ...

+2

Pensez à représenter votre temps interne d'une manière qui se prête davantage à être inspecté, et seulement générer des chaînes comme celles que vous décrivez comme sortie, plutôt que des représentations internes. –

+0

Fera, Seamus, merci pour le conseil! – BeachRunnerFred

Répondre

6
NSScanner* timeScanner=[NSScanner scannerWithString:...the time string...]; 
int hours,minutes; 
[timeScanner scanInt:&hours]; 
[timeScanner scanString:@":" intoString:nil]; //jump over : 
[timeScanner scanInt:&minutes]; 

NSLog(@"hours:%d minutes:%d",hours,minutes); 
+1

6 ans de développement iOS, et je viens de découvrir 'NSScanner'. Très utile! – Martin

1

Si vous construisez une application de réveil, vous voudrez probablement regarder dans les classes NSDate et NSDateFormatter, au lieu d'essayer de séparer toutes ces chaînes en types entiers . En outre, votre plage de temps est un peu étrange (peut-être une faute de frappe?) - ne voulez-vous pas que toutes les 24 heures soient disponibles?

+0

merci, Carl, c'était une faute de frappe;) – BeachRunnerFred

3
  1. Utilisez un NSDateFormatter pour convertir votre chaîne en NSDate.
  2. Utilisez le [NSCalendar currentCalendar] à extract divers date components (comme l'heure, minute, etc.).

En d'autres termes:

NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"h:m a"]; 
NSDate *date = [formatter dateFromString:@"12:59 pm"]; 
[formatter release]; 

NSDateComponents * components = [[NSCalendar currentCalendar] components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:date]; 
NSLog(@"hour: %d", [components hour]); 
NSLog(@"minute: %d", [components minute]); 
2

C'est la voie officielle, comme je le sais. Ce n'est pas assez:

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc]init] autorelease]; 
[dateFormatter setDateFormat:@"h:m a"]; 
NSDate *date = [dateFormatter dateFromString:@"12:34 am"]; 

[dateFormatter setDateFormat:@"h"]; 
NSString *hours = [dateFormatter stringFromDate:date]; 

[dateFormatter setDateFormat:@"m"]; 
NSString *minutes = [dateFormatter stringFromDate:date]; 

mais la chaîne tripoter façon de le faire (chercher :, chercher l'espace, ...), peut vous donner des maux de tête sur le long terme.

2
NSString *time = @"1:00 am"; 
NSString *removeam = [time stringByReplacingOccurencesOfString:@" am" withString:@""]; 
SString *removepm = [removeam stringByReplacingOccurencesOfString:@" pm" withString:@""]; 
NSArray *timeArray = [removepm componentsSeparatedByString:@":"]; 
NSInteger *hour = [[timeArray objectAtIndex:0] intValue]; 
NSInteger *mins = [[timeArray objectAtIndex:1] intValue]; 
+0

merci, j'ai appris beaucoup de choses sur la manipulation de cordes de votre exemple! – BeachRunnerFred

1

obtenir l'intervalle de temps et d'écrire comme

duration.text = [NSString stringWithFormat:@"%d:%02d", (int)audioPlayer.duration/60, (int)audioPlayer.duration % 60, nil]; 
Questions connexes