Pregunta

Me gustaría saber cómo obtener notificaciones locales mientras el NSTIMER de mi aplicación está disparando en segundo plano. Mi NSTIMER verifica una carpeta particular para los archivos cada segundo durante 10 minutos en segundo plano. ¿Cómo haría para recibir una notificación local si se encuentra un archivo?

EDITAR : Código:

- (void) createTimeThread: (float) pIntervalTime
{
    [NSThread detachNewThreadSelector:@selector(startTimerThread) 
                             toTarget:self withObject:nil];
}

- (void) startTimerThread
{
    UIBackgroundTaskIdentifier bgTask = [[UIApplication sharedApplication]
                                         beginBackgroundTaskWithExpirationHandler:^{}];

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    NSRunLoop* runLoop = [NSRunLoop currentRunLoop];

    myTimer = [NSTimer scheduledTimerWithTimeInterval:1
                                               target:self
                                             selector:@selector(conditionChecking:)
                                             userInfo:nil
                                              repeats:YES]; 

     [runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
     [pool release];

    [[UIApplication sharedApplication] endBackgroundTask:bgTask];
}

- (void)conditionChecking:(NSIndexPath *)indexPath
{
    NSString *pathForFile = @"/User/Library/Logs/CrashReporter"; 

    NSFileManager *fileManager = [NSFileManager defaultManager];

    if ([fileManager fileExistsAtPath:pathForFile]) { // Directory exists
        NSArray *listOfFiles = [fileManager contentsOfDirectoryAtPath:pathForFile error:nil];

        if (!listOfFiles || !listOfFiles.count)
        {
            NSLog(@"No Core Dumps found....."); 
        }
        else
        {
            NSLog(@"Core Dump(s) found! :%@", listOfFiles);
        }
    }
}
¿Fue útil?

Solución

Creo que desea notificar a todas las demás clases que la carpeta está llena de archivos.

Los siguientes pasos pueden hacer eso por usted.

  1. Escriba la siguiente línea en la inicialización de la clase donde desea recibir notificación.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkFiles:) name:@"FILES_AVAILABLE" object:nil];

  1. Escriba los métodos de verificación con la siguiente firma en la misma clase.

    -(void)checkFiles:(id)sender

  2. Agregue la siguiente línea en la clase de temporizador cuando los archivos estén disponibles.

    [[NSNotificationCenter defaultCenter] postNotificationName:@"FILES_AVAILABLE" object:self];

Si esto no es útil, puede usar nsuserDefault para almacenar el estado de la aplicación (los archivos están disponibles o no en su caso). O con si está interesado en patrones de diseño leídos sobre el patrón de observador.

En caso de que desee publicar una notificación cuando su aplicación está en modo de fondo y algún proceso que aún se está ejecutando obtiene alguna actualización, entonces se puede lograr utilizando la cola de notificación. Lea el siguiente enlace. No estoy escribiendo código porque el código se da en el enlace en sí.

http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/notifications/articles/notificationqueues.html#//apple_ref/doc/uid/20000217-cjbcecjc

Publique aquí si necesita más ayuda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top