2010-07-01 3 views
0

Im nouveau pour obj-c et besoin d'aide avec ce codeerreur objective-c attrapant

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"E, d LLL yyyy HH:mm:ss Z"]; 
NSDate *date = [dateFormatter dateFromString:currentDate]; 

la date variable ne peut pas être nul. comment puis-je faire en sorte que date = heure actuelle quand il est incapable de formater la chaîne? puis-je utiliser try/catch? Comment?

Répondre

4

Pourquoi tout simplement pas vérifier la date de retour de formatter et si elle est nulle attribuer date à elle ?

NSDate *date = [dateFormatter dateFromString:currentDate]; 
if (!date) 
    date = [NSDate date]; 

ou 1-liner utilisant l'opérateur ternaire (et son extension gcc):

NSDate *date = [dateFormatter dateFromString:currentDate]?:[NSDate date]; 
+0

Je ne connaissais pas cette extension GCC. Très cool. D'autres langages ont quelque chose de similaire, comme C# avec son opérateur '??'. – Paul

+0

comment écririez-vous ceci dans C#? – Yaso

0

pourrait essayer:

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"E, d LLL yyyy HH:mm:ss Z"]; 
NSDate *date = nil; 
@try 
{ 
    date = [dateFormatter dateFromString:currentDate]; 
} 
@catch (NSException *exception) 
{ 
    date = [NSDate date]; 
} 
+0

Ce serait mauvais car l'objet renvoyé dans le bloc '@ try' est autoreleased et l'objet renvoyé par le bloc '@ catch' ne l'est pas. Vous feriez mieux d'utiliser '[date NSDate]' dans le bloc '@ catch'. – Paul

+0

Merci pour cela. Édité. –

+0

@paul comment est-ce que [date NSDate] est différent en termes de gestion de la mémoire? je suis nouveau. – Yaso

0

Ce devrait ne fonctionne pas:

NSDate *date = [dateFormatter dateFromString:currentDate] || [NSDate date]; 
+0

Pourquoi le downvote? –

+0

Le résultat de [dateFormatter dateFromString: date actuelle] || [NSDate date] est BOOL n'est-ce pas? – Vladimir

+0

Non, ce n'est pas afaik, ce sera soit [dateFormatter dateFromString: date actuelle], ou si cela résulte booléen faux ('nil', dans ce cas), il sera' [NSDate date] '. Je viens de le tester en JavaScript, et ça marche là-bas, mais je ne peux pas dire avec 100% de certitude qu'il fonctionne de la même manière en Objective- C ... –

0

vous ne devriez pas le faire parce que le NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; autorelease rend la durée de vie de l'objet incertain. Omettez le autorelease et relâchez l'objet à la place lorsque vous avez terminé. (Au cas où vous n'êtes pas sûr: vous voyez une allocation comme ça (avec autorelease) assez souvent quand vous donnez l'objet à une propriété qui a retain activé)

Questions connexes