¿Cómo obtener una notificación local una vez que la carpeta se determina que no está vacía?
-
28-10-2019 - |
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);
}
}
}
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.
- 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];
Escriba los métodos de verificación con la siguiente firma en la misma clase.
-(void)checkFiles:(id)sender
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í.
Publique aquí si necesita más ayuda.