سؤال

لدي الخطأ -[NSCFString stringValue]:تم إرسال محدد غير معترف به إلى المثيل 0x1578C عند تنفيذ هذا الرمز ، ولا أفهم ما أفعله اسمًا خطأ هو NSString

self.searchValues= [[NSMutableArray alloc] init];
name=@"Bob";
if(self.name!=nil)
   [searchValues addObject: [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Name",@"Label",self.name,@"Value",nil]];
NSLog(@"Array value : %s",[[[searchValues objectAtIndex:0] objectForKey:@"Value"] stringValue]);
هل كانت مفيدة؟

المحلول

أولا، يمكنك إسقاط الرسالة [... stringValue]. وليس من الضروري، أن الهدف من ذلك هو بالفعل سلسلة. ثانيا، يجب عليك استخدام٪ @ بدلا من٪ s للكائنات NSString.

ملحوظة:٪ @ يعمل من أجل أي كائن على الإطلاق، لهذه المسألة. محاولة

NSLog(@"Array: %@", searchValues);

وثق بي، انها يستحق المحاولة.

نصائح أخرى

وليس هناك طريقة "stringValue" على NSString، وبالتالي فإن الخطأ.

إذا كنت تريد حقا قيمة باعتباره C سلسلة، الأسلوب الذي تريده هو UTF8String. للحصول على حالة تسجيل الخاص بك على الرغم من يجب أن مجرد تغيير٪ s إلى٪ @، وتسجيل الكائن NSString مباشرة.

ليست هناك حاجة للاستخدام stringValue في هذه الحالة (يحرر: إنه في الواقع خطأ، كما نشر آخرون، لأنه NSString لا يملك stringValue طريقة).

الكائن الذي يخرج من قاموسك هو بالفعل NSString.ما يجب عليك فعله هو السماح لـ NSLog وظيفة للتعامل مع الكائن ككائن الكاكاو المناسب.الكود الخاص بذلك هو %@, ، لا %s, ، منذ %s مخصص لسلاسل النمط C.

وهنا كيف ينبغي أن تبدو:

self.searchValues = [[NSMutableArray alloc] init];
name=@"Bob";
if(self.name!=nil)
{
    [searchValues addObject: [NSMutableDictionary
           dictionaryWithObjectsAndKeys:@"Name", @"Label",
                                        self.name,@"Value",
                                       nil]];

    NSLog(@"Array value: %@", [[searchValues objectAtIndex:0]
                                 objectForKey:@"Value"]);
}

إذا كان لديك الملكية لاسم المتغير ثم استخدام self.name عند تنفيذ أي عملية على خلاف ذلك لا يوجد أي معنى للتصريح بالممتلكات.

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