سؤال

ولدي الإعداد اثنين توقيت في طلبي وكلاهما يكرر كل بضع ثوان. كل شيء يعمل بشكل جيد باستثناء عندما حان الوقت لإبطال توقيت. عندما يتم قفل الهاتف، وأريد أن يبطل تلك توقيت وثم إعادة لهم عند مقفلة الهاتف.

والدردشة باستخدام الإخطارات لتحقيق عندما لإبطال / إنشاء أجهزة ضبط الوقت.

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notify_didBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notify_willResigneActive:) name:UIApplicationWillResignActiveNotification object:nil];

وهذا ما يحتوي على طريقة notify_didBecomeActive:

clockTicker = [[NSTimer scheduledTimerWithTimeInterval: 1  
                                            target: self  
                                          selector: @selector(showActivity)  
                                          userInfo: nil  
                                           repeats: YES] retain];

alarmTicker = [[NSTimer scheduledTimerWithTimeInterval: CONST_ALARMTIMER  
                                               target: self  
                                             selector: @selector(checkAndLaunchAlarm)  
                                             userInfo: nil  
                                              repeats: YES] retain];

وهذه الطريقة notify_willResigneActive يحتوي على:

if (alarmTicker) {
    [alarmTicker invalidate];
    [alarmTicker release];
    alarmTicker = NULL;
}

if (clockTicker) {
    [clockTicker invalidate];
    [clockTicker release];
    clockTicker = NULL;
}

والمشكلة هي أنني عندما تصحيح هذا على يبطل الموقت الثاني أحصل على خطأ. والشيء الغريب هو أنه إذا كان يمكنني أن أتحول على أوامر من أجهزة ضبط الوقت (مثل أول يبطل clockTicker) .. ما زلت حصلت على خطأ على جهاز ضبط الوقت الثاني.

وماذا يمكن أن تقوم به خطأ؟

وشكرا، ليوناردو

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

المحلول

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

نصائح أخرى

وأنت فقط تحتاج إلى تعيين alarmTicker وclockTicker إلى الصفر داخل الطرق أن تلك توقيت اطلاق النار، وبهذه الطريقة عند القيام الشيك إذا (alarmTicker) أو إذا (clockTicker) سيكون لديهم قيمة الصحيحة.

ولست متأكدا ما وضع توقيت لNULL يفعل بدلا من تعيين إلى لا شيء، لكنني أعرف أنه إذا قمت بإجراء مكالمة على كائن لا شيء، انها لا مرجع سابق. إذا قمت بإجراء مكالمة على كائن NULL، وأعتقد أنها تعطل، على الرغم من أنني لم تثبت صحة ذلك. هذه الوظيفة قد تساعد: NULL مقابل لا شيء في الهدف-C

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