سؤال

في تطبيقي، عند الضغط على زر معين، أدعو طريقة (postButtonClicked:) أن يوزع خدمة ويب على مؤشر ترابط منفصل. ثم عرض المستخدم UIAlertView لإبلاغهم ما إذا كانت المكالمة ناجحة أم لا.

هنا هو الرمز الذي أستخدمه:

- (void)postButtonClicked:(id)sender {
    [NSThread detachNewThreadSelector:@selector(postViaWebservices) toTarget:self withObject:nil];
}

- (void)postViaWebservices {

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    WebServiceManager *wsm = [[WebServiceManager alloc] init];

    BOOL success = [wsm callPost];

    if (success) {
        [self performSelectorOnMainThread:@selector(postSuccess) withObject:nil waitUntilDone:NO];
    } else {
        [self performSelectorOnMainThread:@selector(postFailure) withObject:nil waitUntilDone:NO];
    }   

    [wsm release];

    [pool release];

}

- (void)postSuccess {

    UIAlertView *alert = [[UIAlertView alloc] 
                          initWithTitle:nil
                          message:@"Success message"
                          delegate:self
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil];

    [alert show];
    [alert release];

}

- (void)postFailure {

    UIAlertView *alert = [[UIAlertView alloc] 
                          initWithTitle:nil
                          message:@"Failure message"
                          delegate:self
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil];

    [alert show];
    [alert release];

}

- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

    ...

}

كل هذا يعمل بشكل جيد حتى أضفت alertView:clickedButtonAtIndex: لوحدة تحكم عرض (مطلوب لآخر UIAlertView أنا عرض). الآن، في كل مرة أسمي postButtonClicked:, ، تعطل التطبيق. ومع ذلك، إذا قمت بإزالة alertView:clickedButtonAtIndex:, ، ثم اتصل postButtonClicked:, ، التطبيق يعمل موافق.

لست متأكدا مما أحتاج إلى القيام به لإصلاح هذا.

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

المحلول

بغض النظر عما إذا كان محتوى المنفتحات طريقة المندوب في التنبيه ذات الصلة بالرسائل الناجحة / الفشل أم لا، فلا يزال بإمكانه وجود مشكلة، لذلك تبين لنا محتويات هذه الطريقة هي الطريقة الوحيدة للحصول على إجابة. وفي كلتا الحالتين، يتم استدعاء طريقة منفداء تنبيه طريقة التنبيه عند النقر فوق "موافق" على الرسائل الناجحة / الفشل، لأنك تقوم بتحديد المندوب التنبيهات self. وبعد إذا كنت لا تريد أن تستدعي الطريقة عند رفض تنبيهات النجاح / الفشل، فلا تحدد المندوب.

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