سؤال

يمكنني الوصول إلى عنوان URL مريح واسترجع النتائج. النتائج في json. أدر الاستجابة في سلسلة عن طريق:

- (void)connectionDidFinishLoading:(NSURLConnection   *)connection {
NSString *json = [[NSString alloc] initWithBytes:[self.receivedData mutableBytes] length:[self.receivedData length] encoding:NSUTF8StringEncoding];

متغير JSON لديه قيمة 0x0. عندما أنا الماوس فوقه، أرى <Invalid CFStringRef>. كيف يمكنني تصحيح هذا ليقول لماذا غير صالح؟ أجعل JSON تعطى مرة أخرى من خلال المتصفح في محلل JSON. هذا الشيكات بشكل جيد.

يتم إعطاء النتائج عن طريق إدخال معرف في عنوان URL. معرفات أخرى إرجاع النتائج دون إصدار. مجموعة النتائج كبيرة إلى حد ما.

هل كانت مفيدة؟

المحلول

أولا سوف تستخدم initWithData:encoding: لإعداد nsstring. الفرق الصغير، ولكن هذه الطريقة هناك لسبب ما.

بعد ذلك، سأفعل هوسفو self.receivedData لمعرفة ما هو في الواقع هناك. إذا كانت هذه البيانات غير صحيحة UTF8 المشفرة ثم initWithData:encoding: سوف تفشل.

(Google For NSData Hex Dump للعثور على وظائف فائدة الآخرين للقيام بذلك)

لقد وجدت أن خدمات الويب في بعض الأحيان تكون قذرة مع ترميزها. لذلك عادة ما أقوم عادة بتنفيذ العجلة مثل هذا:

NSString* html = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
if (html == nil) {
    html = [[NSString alloc] initWithData: data encoding: NSISOLatin1StringEncoding];
    if (html == nil) {
        html = [[NSString alloc] initWithData: data encoding: NSMacOSRomanStringEncoding];
    }
}

من النوع المحزن أن هذا مطلوب ولكن العديد من خدمات الويب غير مكتوبة أو تكوينها بشكل صحيح.

نصائح أخرى

يستخدم NSLog للنظر في البايتات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top