Come ottenere la notifica locale una volta che la cartella è determinata per non essere vuota?
-
28-10-2019 - |
Domanda
Vorrei sapere come ottenere notifiche locali mentre Nstimer della mia applicazione sta sparando in background. Il mio nstimer controlla una particolare cartella per i file ogni secondo per 10 minuti in background. Come dovrei ricevere una notifica locale se viene trovato un file?
MODIFICARE : Codice :
- (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);
}
}
}
Soluzione
Credo che tu voglia avvisare tutte le altre classi che la cartella è piena di file.
I seguenti passaggi possono farlo per te.
- Scrivi la riga seguente nell'inizializzazione della classe in cui si desidera ricevere la notifica.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkFiles:) name:@"FILES_AVAILABLE" object:nil];
Scrivi metodi che controlla i file con la seguente firma nella stessa classe.
-(void)checkFiles:(id)sender
Aggiungi la riga seguente nella classe timer quando sono disponibili i file.
[[NSNotificationCenter defaultCenter] postNotificationName:@"FILES_AVAILABLE" object:self];
Se questo non è utile, è possibile utilizzare NSUSERDEFAULT per archiviare lo stato dell'applicazione (i file sono disponibili o meno nel caso). O con se sei interessato ai modelli di progettazione leggi sul modello di osservatore.
Nel caso in cui si desideri pubblicare notifica quando l'applicazione è in modalità in background e alcuni processi ancora in esecuzione ricevono un aggiornamento, che può essere raggiunto utilizzando la coda di notifica. Leggi il seguente link. Non sto scrivendo codice perché il codice è indicato nel link stesso.
Pubblica qui se hai bisogno di più aiuto.