كيف يمكنني استدعاء Printselectoronmainthead: مع محدد يأخذ> 1 حجج؟

StackOverflow https://stackoverflow.com/questions/1460589

  •  12-09-2019
  •  | 
  •  

سؤال

دعوة نموذجية إلى performSelectorOnMainThread: يشبه هذا:

[target performSelectorOnMainThread:action withObject:foo waitUntilDone:NO];

حيث "النتيجة" هي حجة مرت إلى "العمل". الإجراء المقابل سيكون:

- (void)doSomethingWithThing1:(id *)thing1

ما هو بناء الجملة الصحيح لاستدعاء الإجراء الذي يستغرق> 1 حجة؟ مثل:

- (void)doSomethingWithThing1:(id *)thing1 andThing2(id *)thing2 andAlsoThing3(id *)thing3

[target performSelectorOnMainThread:action withObject:??? waitUntilDone:NO];
هل كانت مفيدة؟

المحلول

ردا على سؤال مماثل على تمرير عدم الكائنات إلى طريقة في performSelectorOnMainThread:, وأشارت إلى ديف ديبين الفئة على nsobject., ، والتي تتيح لك أن تفعل شيئا مثل ما يلي:

[[person dd_invokeOnMainThread] doSomethingWithThing1:thing1 andThing2:thing2 andAlsoThing3:thing3];

لأداء طريقة الوسيطة المتعددة على الخيط الرئيسي. أعتقد أن هذا حل أنيق للغاية. وراء الكواليس، يلف الأمور في nsinvocation، مما استدعاء ذلك على الخيط الرئيسي.

ال إطار العنبر هل شيء مشابه لهذا، كذلك.

نصائح أخرى

يمكنك القيام بذلك عن طريق وضع Args الخاص بك في القاموس أو مجموعة ويمر ذلك إلى وظيفة خاصة

- (void)doStuff:(NSString *)arg1 and:(NSString *)arg2 and:(NSString *)arg3 {
...
}

- (void)doStuff:(NSArray *)argArray {
    [self doStuff:[argArray objectAtIndex:0]
              and:[argArray objectAtIndex:1]
              and:[argArray objectAtIndex:2];
}

إذا كنت ترغب في الحفاظ على طريقة توقيع جهاز الاستقبال، فأنا أعتقد أنك ستحتاج إلى إلقاء نظرة على استخدام NSInvocation التي تتيح لك تحديد قيم وسيطة متعددة.

يمكنك التفاف مكالمتك واستخدام القاموس كحاوية لحججك كما هو مقترح في إجابة أخرى، ولكن بالنسبة لي يبدو أن هذا يبدو قليلا من رائحة التعليمات البرمجية.

سيكون حلا أفضل على طول هذا الخط إنشاء فئة تغطي قيم الوسيطة - أي نهج مكتوب بشدة. لذلك على سبيل المثال بدلا من المرور firstname, surname, ، سوف تمر على مثيل Person صف دراسي. ربما هذا هو طريق أفضل للنزول لأن الأساليب التي تحتوي على عدد أقل من الحجج يمكن أن تسفر عن كود الأنظف - ولكن هذا قصة أخرى كلها.

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