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);
        }
    }
}
È stato utile?

Soluzione

Credo che tu voglia avvisare tutte le altre classi che la cartella è piena di file.

I seguenti passaggi possono farlo per te.

  1. 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];

  1. Scrivi metodi che controlla i file con la seguente firma nella stessa classe.

    -(void)checkFiles:(id)sender

  2. 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.

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

Pubblica qui se hai bisogno di più aiuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top