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