3

私は XCode 4.6 で作業しており、アプリの再起動時に関数を実行する iOS でローカル通知機能を構築しようとしています。基本的に、一部のラベルのテキストを変更し、アプリの再起動時にサウンドを追加したいと考えています。 . 私は正しい方向に進んでいると思っていましたが、ローカル通知を介してアプリに再入力すると、コードの一部しか機能しません。

最初に、この関数を AppDelegate に追加しました。

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
    NSLog(@"test1");   //this traces successfully 
    myAppViewController * controller = [myAppViewController alloc];
    [controller doSomething];  //calling a function in my myAppViewController.m
}

私はそれを理解したと思っていましたが、今では myAppViewController.m の関数で NSLog だけが機能します:

-(void)doSomething{
    NSLog(@"do something"); //traces successfully 
    self.notificationTime.text=@"something else"; //nothing happens here, it works in other functions but not here
    [self doSomethingElse]; //calling another function from this function for further testing 
}

次の関数が呼び出されます....

-(void)doSomethingElse{
    NSLog(@"do something else"); //this works
    //this whole thing doesn't work -- no sound -- 
    NSURL* url = [[NSBundle mainBundle] URLForResource:@"cash" withExtension:@"mp3"];
    NSAssert(url, @"URL is valid.");
    self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
    [self.player prepareToPlay];
    [self.player play];
    //this doesn't work again
    self.notificationTime.text=@"something else";
}

ここで一般的なアドバイスをいただければ幸いです。誰かが問題を解決するためのまったく別の方法を知っていれば、それも素晴らしいでしょう!

4

2 に答える 2

1

このdidReceiveLocalNotificationメソッドは、アプリケーションがフォアグラウンドで実行されている場合にのみ呼び出されます。バッジが表示され、アプリをクリックして開始する場合は、application:willFinishLaunchingWithOptions:(またはapplication:didFinishLaunchingWithOptions:)を使用してローカル通知を処理する必要があります。これら2つの方法のいずれかでローカル通知を取得するUIApplicationLaunchOptionsLocalNotificationKeyには、オプション辞書のキーとして使用します。

起動オプションからローカル通知を抽出したら、didReceiveLocalNotificationメソッドを呼び出すことが実行可能なアプローチであることに注意してください。

于 2013-03-20T02:21:42.250 に答える
0

アプリ コントローラーの 2 つ目のインスタンスを割り当てる必要はありません。あなたはただ使うことができますself。その場合、コードは期待どおりに機能しますか?

于 2013-02-15T06:50:14.783 に答える