2011-09-28 28 views
-1

我有這樣的:變量不是CFStringRef

partenaire_lat = 48.8160525; 
partenaire_lng = 2.3257800; 

並取得這樣的的NSString:

NSString *endPoint =[NSString stringWithFormat:@"%@,%@", partenaire_lat, partenaire_lng]; 

,並在某些情況下使用此的NSString後,我得到這個愚蠢的錯誤:

Variable is not a CFString. 

但是,如果我創建這樣的NSString:

endPoint = @"48.8160525,2.3257800"它然後完美!

對於這個錯誤Variable is not a CFString我試過如下:

NSString *endPoint1 =[NSString stringWithFormat:@"%@,%@", partenaire_lat, partenaire_lng]; 
CFStringRef endPoint =(CFStringRef)endPoint1; 

並試圖用endPoint但不工作這也不way.Anyone任何神奇的想法THX

EDIT:partenaire_lat and partenaire_lng are both NSString!! 
+1

你使用endPoint的環境是什麼? – hypercrypt

+1

什麼hypercrypt說。您沒有真正顯示導致錯誤的行。 – jrturton

+1

這個錯誤沒有什麼愚蠢的 - 它完全告訴你*錯誤。 – Abizern

回答

3

你有

partenaire_lat = 48.8160525; 
partenaire_lng = 2.3257800; 

你一直在說,這兩個變量是NSString秒,但你不分配NSString ST他們。您需要將NSString對象分配給NSString變量 - 它們不會自動爲您創建。

所以告訴你使用格式化字符串的答案是正確的。你真的應該這樣做:

partenaire_lat = [[NSString stringWithFormat:@"%f", 48.8160525] retain]; 
partenaire_lng = [[NSString stringWithFormat:@"%f", 2.3257800] retain]; 
2

你代碼中有幾個潛在的?問題:

  1. %@ forma t說明符需要對象參數,而它看起來像傳遞了純粹的float(我可能在這裏是錯誤的,因爲沒有足夠的上下文來確定)。更改格式%F解決您的問題,如果這是真的如此:

    NSString *endPoint1 =[NSString stringWithFormat:@"%f,%f", partenaire_lat, partenaire_lng]; 
    
  2. 你的端點1串自動釋放,並可能成爲當前範圍之外無效的,如果你不保留它。所以如果你嘗試在另一種方法中使用你的變量,你可能應該保留它。

+0

%@是對象的說明符,而不是NSString(http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265 -SW1) – diciu

+0

兩者都是NSString! – adrian

+0

我保留它,但不工作! – adrian

2

什麼是lat和lng?我假設浮動或double..so你應該使用[NSString stringWithFormat:@"%f,%f", lat, lng];(或但是你想彩車被格式化)

+0

NSStrings ...看看我的編輯! – adrian

+0

那麼它就像vladimir在他的編輯中指出的那樣。它正在某處被自動釋放。 –

+0

也許,但即使我保留它也不起作用 – adrian

-1

所有你需要做的

NSString *latStr=[[NSNumber numberWithFloat:partenaire_lat] stringValue]; 
NSString *lngStr=[[NSNumber numberWithFloat:partenaire_lng] stringValue]; 

,做任何你想用這些做兩串:)

+0

我認爲把'float'變成'NSNumber'就可以把它變成一個'NSString',當你可以直接使用它的時候,這是一種矯枉過正的行爲。 – Abizern