#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:
У вашего кода есть несколько потенциальных проблем:
-
спецификатор %@ format ожидает параметр объекта, хотя похоже, что вы передаете обычный float (здесь я могу ошибаться, поскольку контекста недостаточно, чтобы быть уверенным). Измените формат на %f, чтобы решить вашу проблему, если это действительно так:
NSString *endPoint1 =[NSString stringWithFormat:@"%f,%f", partenaire_lat, partenaire_lng];
-
Ваша строка 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
в anNSNumber
просто для того, чтобы превратить его в anNSString
, когда вы можете сделать это напрямую.