0

アプリケーションのNSTimerがバックグラウンドで起動している間にローカル通知を取得する方法を知りたいと思います。私のNSTimerは、バックグラウンドで毎秒1秒間ファイルの特定のフォルダをチェックします。ファイルが見つかった場合、どのようにローカル通知を受け取るのですか?フォルダが空ではないと判断されたらローカル通知を受け取るにはどうすればよいですか?

EDIT:コード:

- (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); 
     } 
    } 
} 
+1

あなたのタグが質問と矛盾しています - プッシュ通知またはローカル通知を要求していますか? – BoltClock

+0

あなたの質問が何であるか分かりません。あなたは 'NSTimer'への代替手段を探していますか、単にファイルが見つかったかどうかを通知する方法を知りたいですか? – Saphrosit

+0

私はバックグラウンドで通知を受け取る方法を知りたいだけです。 –

答えて

0

私はあなたがフォルダがファイルで満たされている他のすべてのクラスを通知したいと考えています。

以下の手順で対応できます。

  1. 通知を受けたいクラスの初期化で、次の行を書きます。同じクラスのシグネチャを以下と

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

  1. 書き込みメソッドcheckFiles。

    -(void)checkFiles:(id)sender

  2. ファイルが用意されていたときにタイマークラスに次の行を追加します。

    [[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

あなたはより多くの助けが必要な場合は、ここに投稿。

+0

実際、私はバックグラウンドでユーザーに通知したいだけです。通知は、電話機をスリープ状態にして、2つのボタンがあり、どちらも制御可能です。私はUIAlertViewのボタンをどのように制御するのか(それらにロジックを追加することによって)制御することができるはずです –

+0

うまくいけば、これは役に立ちます... http://developer.apple.com/library/mac/#documentation/ココア/概念/通知/記事/ NotificationQueues.html#// apple_ref/doc/uid/20000217-CJBCECJC – Mohammad

関連する問題