0

ユーザーが名前、イベント名、思い出させる日付などのすべての情報を入力するフォームがあります.だから私はこのようなキーに基づいて通知を設定します

- (void)scheduleNotificationForNotificationID:(NSString *)notificationID1:(NSString *)notificationID2:(NSString *)notificationKey 
{ 
    //Set notification after confirmation of saved data 

    Class cls = NSClassFromString(@"UILocalNotification"); 
    reminderNotification = [[cls alloc] init]; 
    if (cls != nil) 
    { 
       NSDateFormatter *dateFormat = [[[NSDateFormatter alloc]init]autorelease]; 
       [dateFormat setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; 
       NSDate *notificationDate = [dateFormat dateFromString:textField2.text]; 
       reminderNotification.fireDate = notificationDate; 
       reminderNotification.timeZone = [NSTimeZone defaultTimeZone]; 
       NSString *reminderText = [NSString stringWithFormat:@"%@ 's %@ on %@",textField.text,textField1.text,strDate];
       reminderNotification.alertBody = reminderText; 
       reminderNotification.alertAction = @"View"; 
       reminderNotification.soundName = @"apple_ring.mp3"; 
       reminderNotification.applicationIconBadgeNumber = 1; 
       //Use name and event name as keys
       NSDictionary *infoDict = [NSDictionary dictionaryWithObjectsAndKeys:notificationID1,@"Name",notificationID2,@"Event",notificationKey,@"Date",nil];  
       reminderNotification.userInfo = infoDict; 
       [[UIApplication sharedApplication] scheduleLocalNotification:reminderNotification]; 
    } 
}

textField は名前を保持し、textField1 はイベント名を保持します

したがって、各リマインダーを保存するための保存ボタンアクションがあります。ボタンのタイトルが「保存」の場合、リマインダーを保存して新しいレコードを挿入し、「完了」の場合、リマインダーの詳細を編集してレコードを取得します更新しました。

通知の問題は、不適切な発火や発火しないことなどではありません。問題は、通知アラートの本文にあります。これは、ローカル通知を受信したコードです。

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{
    application.applicationIconBadgeNumber = 0;
    NSString *reminderText = [notification.userInfo objectForKey:kReminder];
    [self.addViewController performSelector:@selector(showReminder:) withObject:reminderText afterDelay:1];
}

通知アラート本文のアクションは次のとおりです。

//Notification alert
- (void)showReminder:(NSString *)text
{
    self.reminderAlert = [[UIAlertView alloc] initWithTitle:@"Reminder" message:reminderNotification.alertBody delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(220, 10, 40, 40)];
    UIImage *image= [UIImage imageNamed:@"icon@2x.png"];
    [imageView setImage:image];

    [reminderAlert addSubview:imageView];
    [imageView release];

    [reminderAlert show];
    [reminderAlert release];
}

リマインダー/レコードの詳細を編集した後、以前の通知は何らかの方法でキャンセルされますが、私の問題は、アラート本文が通知アラート本文と同じではないことです。つまり、通知アラート本文は更新されますが、アラート本文ではありません。つまり、名前とイベントによると名前の例:

「Steve Job's Birthday on July 3rd」、これが保存時の最初のイベントであり、ユーザーが「Steve Job's Felicitation on July 3rd」に更新/変更した場合

アラート本文は以前のイベント名の値を保持していますが、通知アラート本文は正しく適切に更新された新しいリマインダーの詳細を保持しています。名前とイベント名の値を保持するためにいくつかの文字列を取り、保存アクションと完了アクションのために、文字列をグローバルに宣言し、完了アクションでリマインダー本文を割り当てる前に文字列値を nil にしようとしました...何も機能しませんでした!

したがって、リマインダー通知アラート本文自体を割り当てました。これでも機能しません:(

どこが間違っていますか....???

私を助けてください。事前に感謝します:)

4

1 に答える 1

1

テキストをリマインダー アラート本文に割り当てるための適切な解決策を見つけました。つまり、3 つのキーに基づいて通知を保存しているためです。

NSDictionary *infoDict = [NSDictionary dictionaryWithObjectsAndKeys:notificationID1,@"Name",notificationID2,@"Event",notificationKey,@"Date",nil];  

これらのキーを使用して、アラート ビューのテキスト/本文を割り当てることができます。

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{
    application.applicationIconBadgeNumber = 0;
    NSString *name = [notification.userInfo objectForKey:@"Name"];
    NSString *event = [notification.userInfo objectForKey:@"Event"];

    //Get the date of event and convert it to required format...
    NSString *date = [notification.userInfo objectForKey:@"Date"];
    NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init]autorelease]; 
    [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
    NSDate *dateVal = [dateFormat dateFromString:date]; 
    [dateFormat setDateFormat:@"MMMM dd"]; 
    NSString *eventDate = [dateFormat stringFromDate:dateVal];

    NSString *reminderText = [NSString stringWithFormat:@"%@'s %@ on %@", name, event, eventDate];
    [self.addViewController performSelector:@selector(showReminder:) withObject:reminderText afterDelay:1];
}

showReminderAction でのテキストの割り当てについて心配する必要はありません。

- (void)showReminder:(NSString *)text
{
    self.reminderAlert = [[UIAlertView alloc] initWithTitle:@"Reminder" message:text delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
    [reminderAlert show];
    [reminderAlert release];
}

これで物事がうまくいくはずです。これが誰かの助けになることを願っています、ありがとう:)

于 2012-07-03T10:03:36.763 に答える