الحصول على سلسلة في NSMutableArray :لماذا لا يعمل؟
-
05-07-2019 - |
سؤال
لدي الخطأ -[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 عند تنفيذ أي عملية على خلاف ذلك لا يوجد أي معنى للتصريح بالممتلكات.