سؤال

ولست بحاجة للاستفادة من مجموعة من القيم المنطقية في موضوعية ج. أنا عندي وضعتها في الغالب، ولكن المترجم يلقي التحذير في البيان التالي:

[updated_users replaceObjectAtIndex:index withObject:YES];

وهذا هو، وأنا متأكد، لأن YES هي ببساطة ليست كائن. انها بدائية. بغض النظر، ولست بحاجة للقيام بذلك، وسوف نقدر كثيرا المشورة بشأن كيفية تحقيق ذلك.

وشكرا.

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

المحلول

نعم، هذا هو بالضبط ما هو عليه: وNS * حاويات يمكن تخزين فقط الأشياء الموضوعية-C، وليس أنواع بدائية

ويجب أن تكون قادرة على تحقيق ما تريد عن طريق لف عنه في NSNumber:

و[updated_users replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:YES]]

وأو باستخدام @(YES) الذي يلتف على BOOL في NSNumber

و[updated_users replaceObjectAtIndex:index withObject:@(YES)]]

ويمكنك بعد ذلك سحب boolValue:

وBOOL mine = [[updated_users objectAtIndex:index] boolValue];

نصائح أخرى

وعلى افتراض مجموعة الخاصة بك تحتوي على كائنات صالحة (وليس مجموعة على غرار ج):

#define kNSTrue         ((id) kCFBooleanTrue)
#define kNSFalse        ((id) kCFBooleanFalse)
#define NSBool(x)       ((x) ? kNSTrue : kNSFalse)

[updated_users replaceObjectAtIndex:index withObject:NSBool(YES)];

ويمكنك إما مخزن NSNumbers:

[updated_users replaceObjectAtIndex:index
                         withObject:[NSNumber numberWithBool:YES]];

وأو استخدام C-مجموعة، اعتمادا على احتياجاتك:

BOOL array[100];
array[31] = YES;

وكما قلت جورج، استخدم C-صفيف.

BOOL myArray[10];

for (int i = 0; i < 10; i++){
  myArray[i] = NO;
}

if (myArray[2]){
   //do things;
}

ومارتين "myArray" هو الاسم الذي تستخدمه "مجموعة" في المثال جورج و.

ومن كسكودي 4.4 يمكنك استخدام حرفية الهدف-C.

و[updated_users replaceObjectAtIndex:index withObject:@YES];

وأين @YES ما يعادل من [NSNumber numberWithBool:YES]

إذا مجموعتك كبير أو كنت تريد أن تكون أسرع من الأجسام objc، حاول أنواع CFBitVector / CFMutableBitVector وجدت في CoreFoundation. انها واحدة من أنواع CF-مجموعات التي لا <م> لا سفينة مع نظيره NS، ولكنها يمكن أن تكون ملفوفة في فئة objc بسرعة، إذا رغبت في ذلك.

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