Question

Je voudrais savoir comment obtenir des notifications locales tout en NSTimer de mon application tire en arrière-plan. Mon NSTimer vérifie un dossier particulier pour les fichiers chaque seconde pendant 10 minutes en arrière-plan. Comment pourrais-je aller sur la réception d'une notification locale si un fichier se trouve?

EDIT: Code:

- (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);
        }
    }
}
Était-ce utile?

La solution

Je crois que vous voulez informer toutes les autres classes de ce dossier est rempli de fichiers.

Les étapes suivantes peut le faire pour vous.

  1. écriture ligne suivante dans l'initialisation de la classe dans laquelle vous souhaitez recevoir une notification.

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

  1. Méthodes d'écriture avec checkfiles après la signature dans la même classe.

    -(void)checkFiles:(id)sender

  2. Ajoutez la ligne suivante dans la classe de minuterie lorsque les fichiers sont disponibles.

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

Si cela est utile, vous pouvez alors utiliser NSUserDefault à l'état du magasin d'application (fichiers sont disponibles ou non en vous cas). OU Avec si vous êtes intéressé par les modèles de conception lire modèle Observer.

Si vous souhaitez publier une notification lorsque votre application est en arrière-plan et un processus qui est toujours en cours obtient une mise à jour alors qui peut être réalisé en utilisant la file d'attente de notification. lire lien suivant. Je ne suis pas en train d'écrire le code parce que le code est donné en lien lui-même.

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Notifications/Articles/NotificationQueues.html#//apple_ref/doc/uid/20000217-CJBCECJC

Postez ici si vous avez besoin de plus d'aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top