переменная не является CFStringRef

#iphone #cfstring

#iPhone #cfstring

Вопрос:

У меня есть это:

 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 , но не работает ни таким образом.У кого-нибудь есть чудесная идея?Спасибо

 EDIT:partenaire_lat and partenaire_lng are both NSString!!
  

Комментарии:

1. В каком контексте вы используете конечную точку?

2. Что сказал hypercrypt. На самом деле вы не показали строку, которая вызывает ошибку.

3. В ошибке нет ничего глупого — она точно сообщает вам, что не так.

4. @Abizern ты проснулся и подумал, что должен дать мне -1?

5. Лучше всего верить сообщению об ошибке, хитрость в том, чтобы понять ошибку программирования, которая вызвала сообщение.

Ответ №1:

У вас есть

 partenaire_lat = 48.8160525; 
partenaire_lng = 2.3257800;
  

Вы продолжаете говорить, что две переменные равны NSString s, но вы не присваиваете NSString им s. Вам нужно назначить NSString объекты NSString переменным — они не создаются для вас автоматически.

Таким образом, ответы, которые говорят вам использовать форматированные строки, верны. Вы действительно должны делать это так:

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

Ответ №2:

что такое lat и lng? я предполагаю, что float или double..so вы должны использовать [NSString stringWithFormat:@"%f,%f", lat, lng]; (или как бы вы ни хотели, чтобы поплавки были отформатированы)

Комментарии:

1. тогда это так, как Владимир указал в своем edit..it где-то происходит авторелиз.

Ответ №3:

У вашего кода есть несколько потенциальных проблем:

  1. спецификатор %@ format ожидает параметр объекта, хотя похоже, что вы передаете обычный float (здесь я могу ошибаться, поскольку контекста недостаточно, чтобы быть уверенным). Измените формат на %f, чтобы решить вашу проблему, если это действительно так:

     NSString *endPoint1 =[NSString stringWithFormat:@"%f,%f", partenaire_lat, partenaire_lng];
      
  2. Ваша строка endPoint1 автоматически освобождается и может стать недействительной за пределами текущей области, если вы ее не сохраните. Поэтому, если вы попытаетесь использовать свою переменную в другом методе, вам, вероятно, следует сохранить ее.

Комментарии:

1. %@ является спецификатором для object, а не NSString ( developer.apple.com/library/mac/#documentation/Cocoa/Conceptual /… )

Ответ №4:

Все, что вам нужно сделать

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

и делайте все, что хотите, с этими двумя строками 🙂

Комментарии:

1. Я думаю, что излишне превращать a float в an NSNumber просто для того, чтобы превратить его в an NSString , когда вы можете сделать это напрямую.