一旦确定文件夹不为空,如何获得本地通知?

Posted

技术标签:

【中文标题】一旦确定文件夹不为空,如何获得本地通知?【英文标题】:How to get local notification once folder is determined to be not empty? 【发布时间】:2011-09-09 00:50:37 【问题描述】:

我想知道如何在我的应用程序的 NSTimer 在后台触发时获取本地通知。我的 NSTimer 在后台每 10 分钟检查一个特定文件夹中的文件。如果找到文件,我将如何接收本地通知?

编辑:代码:

- (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);
        
    

【问题讨论】:

您的标签与您的问题冲突 - 您要求推送通知还是本地通知? 不知道您的问题到底是什么。您是在寻找 NSTimer 的替代品还是只是想知道如何在找到文件时发出通知? 我只是想了解如何在后台获取通知。 你的定时器现在是如何工作的?让我们看看你的代码。 【参考方案1】:

我相信您想通知所有其他类文件夹已填充文件。

以下步骤可以为您做到这一点。

    在您希望接收通知的类的初始化中写入以下行。

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

    在同一类中编写具有以下签名的方法 checkFiles。

    -(void)checkFiles:(id)sender

    当文件可用时,在计时器类中添加以下行。

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

如果这没有帮助,那么您可以使用 NSUserDefault 来存储应用程序的状态(在您的情况下文件是否可用)。或者,如果您对设计模式感兴趣,请阅读观察者模式。

如果您想在应用程序处于后台模式时发布通知,并且某些仍在运行的进程会获得一些更新,则可以使用通知队列来实现。阅读以下链接。我不是在写代码,因为代码是在链接本身给出的。

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

如果您需要更多帮助,请在此处发布。

【讨论】:

其实我只是想在后台通知用户。通知应该唤醒手机并有两个按钮,这两个按钮都是可控的。这意味着我应该能够像控制 UIAlertView 中的按钮一样控制它们(通过向它们添加逻辑) 希望这会有所帮助...developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/…

以上是关于一旦确定文件夹不为空,如何获得本地通知?的主要内容,如果未能解决你的问题,请参考以下文章

如何获得本地 Visual Studio 构建完成的通知?

如何在每天早上 8 点到晚上 8 点之间设置本地通知

带有 Residemenu 的 UILocalNotification

如果用户解雇或忽略第一个通知,如何重复本地通知?

当应用程序的状态不活动时是不是可以获得本地通知

iPhone:如何独立于音量设置大声播放本地通知声音?