#iphone #objective-c #nsstring #escaping #nsmutabledictionary
#iPhone #objective-c #nsstring #экранирование #nsmutabledictionary
Вопрос:
Когда я передаю NSString в качестве объекта для ключа в NSMutableDictionary, кажется, что он содержит escape-символы как обычные символы. Как я могу их удалить? Я пробовал stringByReplacingOccurrencesOfString:@»» с помощью string:@»» byt это не работает.
Вот мой код и выходные данные:
Код:
NSString* fql1 = [NSString stringWithFormat:@"SELECT page_id FROM place WHERE distance(latitude,longitude,"%@","%@") < 1500 AND checkin_count > 5", latitude, longitude];
NSString* fql2 = [NSString stringWithFormat:@"SELECT author_uid, post_id, timestamp, tagged_uids, message FROM checkin WHERE page_id IN (select page_id from #PlaceQuery)"];
NSString* fql = [[NSString stringWithFormat:@"{"PlaceQuery":"%@","CheckInQuery":"%@"}",fql1,fql2] stringByReplacingOccurrencesOfString:@"\" withString:@""];
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObject:fql forKey:@"queries"];
NSLog(@"%@", fql);
NSLog(@"%@", params);
Вывод из NSLog(@»%@», fql):
{«PlaceQuery»: «ВЫБЕРИТЕ page_id ИЗ места, ГДЕ расстояние (широта, долгота,»37.331693″,»-122.030457″) < 1500 И checkin_count > 5″,»CheckInQuery»: «ВЫБЕРИТЕ author_uid, post_id, timestamp, tagged_uids, сообщение ИЗ проверки, в котором указан идентификатор страницы (выберите идентификатор страницы из #PlaceQuery)»}
Вывод из NSLog(@»%@», параметры):
{ запросы = «{«PlaceQuery»:»ВЫБЕРИТЕ page_id Из места, ГДЕ расстояние (широта, долгота,»37.331693″,»-122.030457″) < 1500 И checkin_count > 5″,»CheckInQuery»:»ВЫБЕРИТЕ author_uid, post_id, timestamp, tagged_uids, сообщение ИЗ проверки, в котором указан идентификатор страницы (выберите идентификатор страницы из #PlaceQuery)»}»; }
Я часами искал решение, поэтому заранее БОЛЬШОЕ спасибо 😉
Ответ №1:
NSLog экранирует строки при их распечатке — вероятно, у вас на самом деле нет escape-символов в вашей строке.
Попробуйте это:
NSLog(@"%sn", [ string UTF8String ] )
и посмотрим, что получится…
Комментарии:
1. Или, скорее,
NSArray
экранирует символы при печати с помощью-description
, которая вызываетсяNSLog
. Это небольшой момент, но иногда важный.2. Привет, спасибо за ответ! Ну, каким-то образом escape-символы (), похоже, присутствуют. Я отправляю словарь в запросе facebook. Запрос завершается ошибкой, и это часть сообщения об ошибке: {key = запросы; value = «{«PlaceQuery»:»ВЫБЕРИТЕ page_id ИЗ места, ГДЕ расстояние (широта, долгота,»37.331693″,»-122.030457″) < 1500 И checkin_count > 5″,»CheckInQuery»:»ВЫБЕРИТЕ author_uid, post_id, timestamp, tagged_uids, сообщение ИЗ проверки, в котором указан идентификатор страницы (выберите идентификатор страницы из #PlaceQuery)»}»;
3. как вы выполняете свой запрос? ASIHTTP? Что показывает [строка ответа на запрос]?
4. Привет, я думаю, что, возможно, я отправляю неверный запрос facebook. Есть ли у кого-нибудь пример кода для отправки запроса multiquery fql с использованием facebook graph api?
Ответ №2:
Оказалось, что это проблема с разрешениями … да, смущает… Что меня смутило, так это то, что escape-символы были в выходных данных ответа…
Спасибо @williham и @nielsbot