نتيجة 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