2010-05-28 71 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); 

我沒有得到確切的日期嗎?也越來越警告,同時編制
警告:從兼容的指針類型過客「CGContextShowTextAtPoint」的論點4將NSString轉換爲字符串

回答

1

什麼的stringFromDate的價值是什麼?你在期待什麼?

也越來越警告,同時編制 警告:傳遞 「CGContextShowTextAtPoint」的論點4從 兼容的指針類型

如果你看看文檔爲CGContextShowTextAtPoint,你會看到第四個參數需要一個char*,不是NSString*.

您有:

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

你想:

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

函數的原型爲:

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

但在第四個參數要傳遞一個*的NSString **(而不是函數原型所要求的* const char **)。

可以NSString的轉換到使用的NSString的cStringUsingEncoding方法C字符串,例如:

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

它在這方面的確定,因爲日期格式是YYYY,但在一般情況下,你不應該使用'[someString cStringUsingEncoding:NSASCIIStringEncoding]'未經測試的NULL返回值。例如,如果日期格式設置爲長日期格式,並且代碼在法語區域設置的iPhone上運行,並且月份是八月(或法國,則說明是août),則空指針將作爲第四個參數。最好的情況是不顯示文本,最糟糕的情況將是seg故障。 – JeremyP 2010-05-28 07:40:29

+0

改爲使用UTF8String的好理由。 :) – 2010-05-28 07:43:09

+0

好點,但它看起來像是一個更好的主意[NSString drawAtPoint:withFont:] ref http://stackoverflow.com/questions/1237565/iphone-cgcontextshowtextatpoint-for-japanese-characters和http:// stackoverflow .COM /問題/ 2087418/iphone-Unicode的文本與 - CoreGraphics中 – diciu 2010-05-28 09:36:18