Результат JSON (NSArray):valueForKey не работает должным образом
Вопрос
У меня есть NSArray в результате запроса веб-службы (JSON).
Если я распечатаю NSLog("%@", jsonResult)
Массив отображается правильно:
(
{
text = “Some text”;
coordinates = “11.333345 - 09.33349”;
}
{
text = “Some text2”;
coordinates = “11.333345 - 09.33349”;
}
{
text = “Some text3”;
coordinates = “11.333345 - 09.33349”;
}
…
)
Но если я попытаюсь получить доступ к значению ключа «текст» каждой записи в NSArray с помощью следующей функции, я всегда получаю такой вывод:
Text )r'ì• (instead of "Some text2, 3 ....")
Вот думаю, что тут несовпадение типов, но не знаю, как понять, в чем проблема.В Objective-C это работает очень хорошо.
func getResult(){
self.webService.getResult({ jsonResult in
jsonResult!.enumerateObjectsUsingBlock({ object, index, stop in
var txt : NSString = object.valueForKey("text") as NSString
NSLog("Text %s", txt)
})
NSLog("Ready %@", jsonResult!)
});
}
Есть идеи, что происходит не так?
ОБНОВЛЕНИЕ 1
Я понял, что если я просто использую NSObject вместо NSString, он отображает текст правильно.
var txt : NSObject = object.valueForKey("text") as NSObject
NSLog("%@", txt)
Но в любом случае мне нужно преобразовать этот объект NSObject в NSString или String, чтобы отобразить...
В какой кодировке предполагается отображать строку... или как привести этот NSObject????
Решение
var txt : NSString = object.valueForKey("text") as NSString
NSLog("Text %s", txt)
Проблема в том, %s
спецификатор формата, предназначенный для строк в стиле C.Тебе нужно %@
, который предназначен для объектов.
В Swift рекомендуется использовать println()
, что полностью устраняет форматные строки:
var txt : NSString = object.valueForKey("text") as NSString
println("Text \(txt)")