Результат JSON (NSArray):valueForKey не работает должным образом

StackOverflow https://stackoverflow.com//questions/24042771

  •  21-12-2019
  •  | 
  •  

Вопрос

У меня есть 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)")
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top