Экранирующие символы в NSMutableDictionary

#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