Hello Every one,
Today i am going to post the one very useful tutorial for creating the Localnotification application in which the stores the LocalNotification and retrieve the Notification from the database and retrieved data also convert into NSData then the that NSData is converting into the UILocalNotification that object is schedule the Notification for the fetching from the SQLite database.In this Tutorial i will creating the set Alarm and that alarm detail stores into the DB, Also the we can bind the NSDictionary to NSLocalNotification,If the user select the and want to delete the particular alarm then swipe it and remove from the database and also UINotification also
Note:- In UILocalNotification one Issue arise like when the application is deleted from the Device then the LocalNotification can’t deleted when the second time i instal the application then earlier notification show.
Solution:- For that i decide the one conditional checking when the no one entry in DB then the code thru i cancel all notifications.
now, I starts the Tutorial.
Step 1) Create the new project >> Select Single View Application >> Next >>Give the application name like “LocalNotificationDemo”.
Step 2) import the new frame work name is “libsqlite3.0.dylib”
Step 3) Create the new database either use firefox addon “SQLite Manager” or also use the “Mike Tool for SQLite Database”
Following is the structure of the database
Step 4) Copy the database file into project resources.
Step 5) Create new file with .xib name as a “DBManager”
below Code for the DBManager.h file
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#import <Foundation/Foundation.h> #import <sqlite3.h> #define documentsDirectory_Statement NSString *documentsDirectory; \ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); \ documentsDirectory = [paths objectAtIndex:0]; @interface DBManager : NSObject { NSString *dbPath; sqlite3 *database; } @property(nonatomic,retain) NSString *dbPath; +(DBManager*)sharedManager; -(void)insertData1:(NSArray*)arForData; -(NSArray*)getAllNotif; -(BOOL)DeleteNotif:(NSString*)Data; @end |
below Code for the DBManager.m file
Initialization of a database
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
-(id)init{ if(self=[super init]) { documentsDirectory_Statement; documentsDirectory=[documentsDirectory stringByAppendingPathComponent:@"test.sqlite"]; self.dbPath=documentsDirectory; NSFileManager *fm=[NSFileManager defaultManager]; if(![fm fileExistsAtPath:self.dbPath]) { NSString *localDB=[[NSBundle mainBundle] pathForResource:@"test" ofType:@"sqlite"]; NSError *err; if(![fm copyItemAtPath:localDB toPath:self.dbPath error:&err]){ NSLog(@"Error in creating DB -> %@",err); } } if(sqlite3_open([self.dbPath UTF8String], &database) !=SQLITE_OK){ NSLog(@"error while opening database."); } else { sqlite3_close(database); } } return self; } |
Constants of a file
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#define PUT_Value(_TO_,_FROM_) { \ NSString *str=[dObj valueForKey:_FROM_]; \ if(!str) str=@" "; \ sqlite3_bind_text(compiledStmt,_TO_,[str UTF8String],-1,SQLITE_TRANSIENT); \ } #define PUT_Blob(_TO_,_FROM_) { \ sqlite3_bind_blob(compiledStmt,_TO_,[[dObj valueForKey:_FROM_] bytes],[[dObj valueForKey:_FROM_] length],NULL);\ } #define PUT_Integer(_TO_,_FROM_) { \ NSInteger numbr=[[dObj valueForKey:_FROM_] intValue]; \ sqlite3_bind_int(compiledStmt,_TO_,numbr); \ } #define PUT_Double(_TO_,_FROM_) { \ CGFloat doubleX=[[dObj valueForKey:_FROM_] floatValue]; \ sqlite3_bind_double(compiledStmt,_TO_,doubleX); \ } #define PUT_Date(_TO_,_FROM_) { \ sqlite3_bind_text(compiledStmt,_TO_, [[[dObj valueForKey:_FROM_] description] UTF8String], -1, SQLITE_TRANSIENT);\ } #define GET_Value(_TO_,_FROM_) NSString *_TO_; { \ const unsigned char *c=sqlite3_column_text(compiledStmt,_FROM_); \ _TO_= c ? [NSString stringWithUTF8String:(char*)c] : @"" ; \ } #define GET_Double(_TO_,_FROM_) double _TO_;{ \ _TO_=sqlite3_column_double(compiledStmt,_FROM_); \ } #define GET_Integer(_TO_,_FROM_) NSUInteger _TO_; { \ _TO_ = sqlite3_column_int(compiledStmt,_FROM_); \ } #define GET_Date(_TO_,_FROM_) { \ _TO_=sqlite3_column_double(compiledStmt, _FROM_)];\ } #define GET_Blob(_TO_,_FROM_) { \ _TO_=sqlite3_column_blob(compiledStmt, _FROM_) length:sqlite3_column_bytes(compiledStmt, _FROM_)];\ } |
Insert data into database
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
-(void)insertData1:(NSArray*)arForData{ sqlite3_stmt *compiledStmt; if(sqlite3_open([self.dbPath UTF8String], &database) ==SQLITE_OK) { sqlite3_prepare_v2(database, "BEGIN TRANSACTION", -1, &compiledStmt, NULL); sqlite3_step(compiledStmt); sqlite3_finalize(compiledStmt); const char *sqlInsertQry="insert into alarm(NotiData,fireDate) values(?,?)"; if(sqlite3_prepare_v2(database, sqlInsertQry, -1, &compiledStmt, NULL) == SQLITE_OK ){ for (NSDictionary *dObj in arForData) { sqlite3_bind_blob(compiledStmt,1,[[dObj valueForKey:@"NotiData"] bytes],[[dObj valueForKey:@"NotiData"] length],NULL); PUT_Date(2,@"fireDate"); NSUInteger err = sqlite3_step(compiledStmt); if (err != SQLITE_DONE){ NSLog(@"error while binding %d %s",err, sqlite3_errmsg(database)); NSLog(@"%@",dObj); } sqlite3_reset(compiledStmt); } sqlite3_finalize(compiledStmt); } else { NSLog(@"Invalid Query"); } sqlite3_prepare_v2(database, "END TRANSACTION", -1, &compiledStmt, NULL); sqlite3_step(compiledStmt); sqlite3_finalize(compiledStmt); sqlite3_close(database); } else { NSLog(@"error while opening database."); } } |
Select all data from the database
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
-(NSArray*)getAllNotif{ NSMutableArray *ar=[[NSMutableArray alloc] init]; [ar removeAllObjects]; NSString *strQuery=[NSString stringWithFormat:@"select * from alarm order by fireDate"]; const char *query=[strQuery UTF8String]; sqlite3_stmt *compiledStmt; if(sqlite3_open([self.dbPath UTF8String], &database)==SQLITE_OK) { if(sqlite3_prepare_v2(database, query, -1, &compiledStmt, NULL)==SQLITE_OK){ while (sqlite3_step(compiledStmt)==SQLITE_ROW) { [ar addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:[NSData dataWithBytes:sqlite3_column_blob(compiledStmt, 1) length:sqlite3_column_bytes(compiledStmt, 1)],@"NotifObj", [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStmt, 2)],@"FireDate",nil]]; NSLog(@"Array is ::>>%@",ar); } } else { NSLog(@"Invalid query"); } } else { NSLog(@"error while opening database."); } NSArray *arToReturn=([ar count]>0)?[NSArray arrayWithArray:ar]:nil; ar=nil; if([ar count]>0){ } else{ } return arToReturn; } |
Delete data from the database
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
-(BOOL)DeleteNotif:(NSString*)Data{ NSLog(@"%@",Data); BOOL retVal=NO; const char *sqlStatement="delete from alarm where fireDate=?"; // const char *query=[strQuery UTF8String]; sqlite3_stmt *compiledStmt; if (sqlite3_open([self.dbPath UTF8String], &database) != SQLITE_OK) { NSLog(@"Error opening database!"); } else { if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStmt, NULL) == SQLITE_OK) { sqlite3_bind_text(compiledStmt,1, [[Data description] UTF8String], -1, SQLITE_TRANSIENT); if(sqlite3_step(compiledStmt)==SQLITE_DONE){ retVal=YES; } else { NSLog(@"error in query"); retVal=NO; } } else { NSLog(@"error in query"); } sqlite3_finalize(compiledStmt); sqlite3_close(database); } return retVal; } |
Step 6) Create the new file name like “NotifierViewController”
Insert below code into NotifierViewController.h
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#import <UIKit/UIKit.h> @interface NotifierViewController : UIViewController<UITableViewDataSource,UITableViewDelegate > { IBOutlet UITableView *tableview; IBOutlet UIDatePicker *datePicker; IBOutlet UITextField *eventText; NSDate *pickerDate; } @property(nonatomic ,retain)NSString *strForDate; @property (nonatomic, retain) IBOutlet UITableView *tableview; @property (nonatomic, retain) IBOutlet UIDatePicker *datePicker; @property (nonatomic, retain) IBOutlet UITextField *eventText; @property(nonatomic,retain) NSMutableArray *arFordata; - (IBAction) scheduleAlarm:(id) sender; -(IBAction)btnBack; @property(nonatomic,retain)NSMutableArray *notificationArray; @end |
Insert below code into NotifierViewController.m
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
#import "NotifierViewController.h" #import "DBManager.h" @implementation NotifierViewController @synthesize datePicker,tableview, eventText; @synthesize strForDate = _strForDate; @synthesize arFordata = _arFordata; @synthesize notificationArray = _notificationArray; - (void) viewWillAppear:(BOOL)animated { NSArray *AllForData1= nil; AllForData1= [[DBManager sharedManager] getAllNotif]; if([AllForData1 count] <= 0) { [[UIApplication sharedApplication] cancelAllLocalNotifications]; } [self.datePicker setDate:[NSDate date] animated:YES]; [self.tableview reloadData]; self.strForDate=[[NSString alloc]init]; self.title = @"Add New Alarm"; NSArray *AllForData= [[DBManager sharedManager] getAllNotif]; for(int i=0;i<[AllForData count];i++){ NSData *data = (NSData*)[[AllForData objectAtIndex:i]valueForKey:@"NotifObj"]; UILocalNotification *notificationObject = (UILocalNotification*)[NSKeyedUnarchiver unarchiveObjectWithData:data]; if (notificationObject == nil) return; notificationObject.fireDate = pickerDate; notificationObject.timeZone = [NSTimeZone defaultTimeZone]; // Notification details notificationObject.alertBody = [eventText text]; // Set the action button notificationObject.alertAction = @"View"; notificationObject.soundName = UILocalNotificationDefaultSoundName; notificationObject.applicationIconBadgeNumber = 1; // Specify custom data for the notification NSDictionary *infoDict = [NSDictionary dictionaryWithObject:notificationObject.alertBody forKey:@"Body"]; notificationObject.userInfo = infoDict; // Schedule the notification [[UIApplication sharedApplication] scheduleLocalNotification:notificationObject]; } } - (IBAction) scheduleAlarm:(id) sender { [eventText resignFirstResponder]; pickerDate = [self.datePicker date]; UILocalNotification *localNotif = [[UILocalNotification alloc] init]; if (localNotif == nil) return; localNotif.fireDate = pickerDate; localNotif.timeZone = [NSTimeZone defaultTimeZone]; // Notification details localNotif.alertBody = [eventText text]; // Set the action button localNotif.alertAction = @"View"; localNotif.soundName = UILocalNotificationDefaultSoundName; localNotif.applicationIconBadgeNumber = 1; // Specify custom data for the notification NSDictionary *infoDict = [NSDictionary dictionaryWithObject:localNotif.alertBody forKey:@"Body"]; localNotif.userInfo = infoDict; // Schedule the notification [[UIApplication sharedApplication] scheduleLocalNotification:localNotif]; //===================================Insert the notification in database============================================= NSDictionary *dicForData=[NSDictionary dictionaryWithObjectsAndKeys:[NSKeyedArchiver archivedDataWithRootObject:localNotif],@"NotiData",[localNotif fireDate],@"fireDate",nil]; self.arFordata=[NSArray arrayWithObjects:dicForData,nil]; [[DBManager sharedManager] insertData1:self.arFordata]; //================================================================================================= // ////===========================Select the notification in Database and convert into notification===== // NSArray *AllForData= [[DBManager sharedManager] getAllNotif]; // for(int i=0;i<[AllForData count];i++){ // NSData *data = (NSData*)[[AllForData objectAtIndex:i]valueForKey:@"NotifObj"]; // NSLog(@"%@",data); // UILocalNotification *notif = (UILocalNotification*)[NSKeyedUnarchiver unarchiveObjectWithData:data]; // NSLog(@"%@",notif); // [[UIApplication sharedApplication] scheduleLocalNotification:notif]; // } ////================================================================================================= [localNotif release]; [self.tableview reloadData]; } -(IBAction)btnBack{ [self dismissModalViewControllerAnimated:YES]; } #pragma mark - #pragma mark Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [[[UIApplication sharedApplication] scheduledLocalNotifications] count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; } NSArray *notificationArray = [[UIApplication sharedApplication] scheduledLocalNotifications]; NSLog(@"%@",notificationArray ); UILocalNotification *noti=[notificationArray objectAtIndex:indexPath.row]; if([notificationArray count]>0){ UILocalNotification *notif = [notificationArray objectAtIndex:indexPath.row]; //===================Finding the difference================================= NSDateComponents *comp=[[NSCalendar currentCalendar] components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:[NSDate date] toDate:noti.fireDate options:0] ; ////===================Finding the difference================================= [cell.textLabel setText:notif.alertBody]; cell.detailTextLabel.text=[NSString stringWithFormat:@"%d : %d : %d : %d : %d : %d",comp.year,comp.month,comp.day,comp.hour,comp.minute,comp.second]; } else if([notificationArray count] == 0){ [self.tableview reloadData]; } return cell; } |
Following is the output of the User Interface

7) Create New File with name as “CountDown” which shows the list of the Notifications and if users want do delete the notification here.
Below code for the “CountDown.h”
|
1 2 3 4 5 6 7 8 9 10 11 |
#import <UIKit/UIKit.h> @interface CountDown : UIViewController @property(nonatomic,strong)IBOutlet UITableView *tblForSelection; @property(nonatomic,strong)NSMutableArray *arForNames; @property(nonatomic,strong)NSMutableArray *arForSubTitle; @property(nonatomic,strong)NSMutableArray *notificationArray; -(void)ReloadAlldataFromDB; -(void)cancelNotification:(NSIndexPath *)IndexPath; @end |
Below code for the “CountDown.m”
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
#import "CountDown.h" #import "DBManager.h" #import "NotifierViewController.h" @implementation CountDown @synthesize tblForSelection = _tblForSelection; @synthesize arForNames = _arForNames; @synthesize arForSubTitle = _arForSubTitle; @synthesize notificationArray = _notificationArray; - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { } return self; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } #pragma mark - View lifecycle - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:YES]; [self.navigationController setNavigationBarHidden:NO]; self.title=@"Count Down"; [self ReloadAlldataFromDB]; // Do any additional setup after loading the view from its nib. } -(void)ReloadAlldataFromDB{ [self.arForNames removeAllObjects]; NSArray *AllForData= nil; AllForData= [[DBManager sharedManager] getAllNotif]; NSLog(@"%@",AllForData); for(int i=0;i<[AllForData count];i++){ NSData *data = (NSData*)[[AllForData objectAtIndex:i]valueForKey:@"NotifObj"]; UILocalNotification *notif = (UILocalNotification*)[NSKeyedUnarchiver unarchiveObjectWithData:data]; [self.arForNames addObject:[NSString stringWithFormat:@"%@",notif.alertBody]]; [self.arForSubTitle addObject:[NSString stringWithFormat:@"%@",notif.fireDate]]; [self.notificationArray addObject:notif]; } [self.tblForSelection reloadData]; } - (void)viewDidLoad { [super viewDidLoad]; self.arForNames=[[NSMutableArray alloc] init]; self.arForSubTitle=[[NSMutableArray alloc] init]; self.notificationArray=[[NSMutableArray alloc]init]; // Do any additional setup after loading the view from its nib. } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationPortrait); } #pragma mark - #pragma mark Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 2; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return (section ==0)?1:[self.arForNames count]; } // Customize the appearance of table view cells. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; } if (indexPath.section==0) { if(indexPath.row==0){ cell.textLabel.text=@"Add New Listed Event"; } } else{ UILocalNotification *noti = [self.notificationArray objectAtIndex:indexPath.row]; if([self.notificationArray count]>0){ ////===================Finding the difference================================= NSDateComponents *comp=[[NSCalendar currentCalendar] components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:[NSDate date] toDate:noti.fireDate options:0] ; NSLog(@"%@",[NSString stringWithFormat:@"%d : %d : %d : %d : %d : %d",comp.year,comp.month,comp.day,comp.hour,comp.minute,comp.second]); if(comp.year <= 0 && comp.month <= 0 && comp.day <= 0 && comp.hour <= 0 && comp.minute <= 0 && comp.second <= 0){ [[DBManager sharedManager] DeleteNotif:[self.arForSubTitle objectAtIndex:indexPath.row]]; } ////===================Finding the difference================================= cell.textLabel.text=[self.arForNames objectAtIndex:indexPath.row]; NSDateFormatter* df_local = [[NSDateFormatter alloc] init]; [df_local setTimeZone:[NSTimeZone localTimeZone]]; [df_local setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSString *strForArr=[self.arForSubTitle objectAtIndex:indexPath.row]; NSString *newStr = [strForArr substringToIndex:[strForArr length]-5]; NSDate *theDate = [df_local dateFromString:newStr]; NSLog(@"%@",[[theDate description] substringToIndex:[[theDate description] length]-5]); cell.detailTextLabel.text=[theDate description]; } } return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)IndexPath { if(IndexPath.section == 0){ if(IndexPath.row == 0){ NotifierViewController *controller=[[NotifierViewController alloc] initWithNibName:@"NotifierViewController" bundle:nil]; [self presentModalViewController:controller animated:YES]; } } [self.tblForSelection deselectRowAtIndexPath:[self.tblForSelection indexPathForSelectedRow] animated:YES]; } -(void)cancelNotification:(NSIndexPath *)IndexPath { //===========================Cancel Notification code====================================== NSArray *notificationArray = [[UIApplication sharedApplication] scheduledLocalNotifications]; NSLog(@"%@",notificationArray); UILocalNotification *notif = [notificationArray objectAtIndex:IndexPath.row]; NSString *strFodBody=notif.alertBody; UIApplication *app = [UIApplication sharedApplication]; NSArray *eventArray = [app scheduledLocalNotifications]; for (int i=0; i<[eventArray count]; i++) { UILocalNotification* oneEvent = [notificationArray objectAtIndex:i]; NSDictionary *userInfoCurrent = oneEvent.userInfo; NSString *uid=[NSString stringWithFormat:@"%@",[userInfoCurrent valueForKey:@"Body"]]; NSLog(@"%@",userInfoCurrent); if ([uid isEqualToString:strFodBody]) { // //Cancelling local notification [app cancelLocalNotification:oneEvent]; break; } } //=================================================================================================== } - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if(indexPath.section == 1){ if (editingStyle == UITableViewCellEditingStyleDelete) { NSLog(@"%@",[self.arForSubTitle objectAtIndex:indexPath.row]); [[DBManager sharedManager] DeleteNotif:[self.arForSubTitle objectAtIndex:indexPath.row]]; [self.notificationArray removeObjectAtIndex:indexPath.row]; [self.arForSubTitle removeObjectAtIndex:indexPath.row]; [self.arForNames removeObjectAtIndex:indexPath.row]; [self cancelNotification:indexPath]; [self.tblForSelection reloadData]; } } [self.tblForSelection deselectRowAtIndexPath:[self.tblForSelection indexPathForSelectedRow] animated:YES]; } @end |
Following is the output of the User Interface
8) Output of the Application
Lists of the Notificaitons
Delete The Notification
Step 9) Precautions of the Application in iPhone Application.
Note :- In LocalNotification only we can sets the 64 LocalNotification set at a time in every application
Step 10) Grab the Source code from Here.
Thanks and Regards,
Nimit Parekh.



