2011-09-28 25 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