2010-05-28 6 views
4
NSDate *now = [NSDate date];         
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];      
[formatter setDateFormat:@"yyyy"];      

NSString *stringFromDate = [formatter stringFromDate:now]; 
CGContextShowTextAtPoint(context, 50, 50, stringFromDate, 5); 

Je ne reçois pas la date exacte? également obtenir avertissement lors de la compilation
avertissement: passage d 'arguments 4 'CGContextShowTextAtPoint' de type pointeur incompatibleConvertir NSString en chaîne

Répondre

1

Quelle est la valeur de stringFromDate? Qu'attendez-vous?

également obtenir avertissement lors de la compilation avertissement: Argument passage 4 « CGContextShowTextAtPoint » de type pointeur incompatible

Si vous regardez la documentation pour CGContextShowTextAtPoint, vous verrez que le quatrième paramètre doit être un char*, pas NSString*.

Vous avez:

GContextShowTextAtPoint(context, 50, 50, stringFromDate, 5); 

Vous voulez:

GContextShowTextAtPoint(context, 50, 50, [stringFromDate UTF8String], 5); 
2

prototype de la fonction est:

void CGContextShowTextAtPoint (
    CGContextRef c, 
    CGFloat x, 
    CGFloat y, 
    const char *string, 
    size_t length 
); 

mais dans le 4ème argument que vous passez un * NSString ** (et pas un * const char ** comme requis par le prototype de fonction).

Vous pouvez convertir le NSString à une chaîne C en utilisant la méthode cStringUsingEncoding du NSString, .: par exemple

CGContextShowTextAtPoint(context, 50, 50, [stringFromDate cStringUsingEncoding:NSASCIIStringEncoding]); 
+0

Il est OK dans ce contexte, en raison du format de date étant yyyy mais en général, vous ne devez jamais utiliser '[someString cStringUsingEncoding: NSASCIIStringEncoding]' sans test pour une valeur de retour NULL. Par exemple, si le format de date est défini sur le format de date longue et que le code est exécuté sur un iPhone dans la langue française et que le mois est août (ou août, comme on dit en France), un pointeur nul sera transmis comme le quatrième paramètre. Dans le meilleur des cas, aucun texte ne sera affiché, le pire des cas sera une faute de seg. – JeremyP

+0

Bonne raison d'utiliser 'UTF8String' à la place. :) –

+0

Bon point mais il semble que ce soit une meilleure idée d'utiliser [NSString drawAtPoint: withFont:] ref http://stackoverflow.com/questions/1237565/iphone-cgcontextshowtextatpoint-for-japanese-characters et http: // stackoverflow .com/questions/2087418/iphone-unicode-text-avec-coregraphics – diciu