我正在iPhone中创建一个警报应用程序,它使用SQLite和本地通知。我有一个tableview类,其中包含4行用于选择时间,重复间隔,声音等。当我选择所有这些因素时,它们都存储在全局变量中。
在我的tableview中,我选择这些行,我有一个保存按钮。当我在选择特定行后单击保存按钮时,时间,重复和声音的值将通过此全局变量保存在SQLite数据库中。现在我将这些变量传递给我的通知对象,以便在单击“保存”按钮时设置警报。但通知没有设定。
这是我的通知代码:
//
// TAddAlarmController.m
// StopSnooze
//
// Created by raji.nair on 7/18/11.
// Copyright 2011 __MyCompanyName__. All rights reserved.
//
#import "TAddAlarmController.h"
//#import "CustomCell.h"
#import "StopSnoozeAppDelegate.h"
#import "Alarm.h"
#import "TAlarmNewController.h"
#import "global.h"
#import "TTimePickerController.h"
#import "TAlarmSoundController.h"
#import "AlarmMessageController.h"
#import "TPenaltyController.h"
#import "TSnoozeIntervalController.h"
#define DATABASE_TITLE @"StopSnooze.sqlite"
#define DATABASE_NAME @"StopSnooze"
@implementation TAddAlarmController
@synthesize dateFormatter;
@synthesize am;
@synthesize undoManager;
@synthesize time;
@synthesize tblView;
@synthesize detailTxt;
//@synthesize controller;
#pragma mark -
#pragma mark View lifecycle
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"Add Alarms";
newtemp = anew.temp;
UIBarButtonItem * saveButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(save)];
self.navigationItem.rightBarButtonItem = saveButton;
[saveButton release];
}
-(void)schedulealarm
{
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif == nil)
return;
localNotif.fireDate = (NSDate*)lblDate.text;
//lblDate.text is where my date is getting saved through the picker but in the fireDate it is showing null.
localNotif.timeZone = [NSTimeZone defaultTimeZone];
// Notification details
localNotif.repeatInterval = (int)newrepeat;
//newrepeat is the global variable where is select the repeat interval for alarm.
localNotif.alertBody = newmessage;
// Set the action button
localNotif.alertAction = @"View";
localNotif.soundName = UILocalNotificationDefaultSoundName;
localNotif.applicationIconBadgeNumber = 1;
if (localNotif == nil) {
NSLog(@"Yes");
}
else {
NSLog(@"Notification called");
}
// Specify custom data for the notification
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:@"someValue" forKey:@"someKey"];
localNotif.userInfo = infoDict;
// Schedule the notification
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
[localNotif release];
}
- (void)viewDidUnload {
// Release any properties that are loaded in viewDidLoad or can be recreated lazily.
self.dateFormatter = nil;
}
-(void)saveInDatabase
{
app = (StopSnoozeAppDelegate*)[[UIApplication sharedApplication] delegate];
[app copyDatabaseIfNeeded];
NSString *filePath =[app getDBPath];
sqlite3 *database;
NSTimeInterval timeStamp = [[NSDate date]timeIntervalSince1970];
NSNumber *timeStampObj = [NSNumber numberWithInt:timeStamp];
NSLog(@"%d",timeStampObj);
AlarmID =(int)timeStampObj;
NSLog(@"%@",AlarmID);
NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[[NSDateFormatter alloc]init]autorelease];
[formatter setDateFormat:@"HH:MM"];
NSString *str = [formatter stringFromDate:date];
NSLog(@"%@",str);
if (sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) {
const char *sqlStatement = "insert into AlarmsInformation(alarm_id,alarm_time,snooze_interval,sound_file,alarm_message) VALUES (?,?,?,?,?)";
sqlite3_stmt *compiledStatement;
if (sqlite3_prepare_v2(database,sqlStatement ,-1, &compiledStatement,NULL) == SQLITE_OK) {
//sqlite3_bind_text(compiledStatement, 1, [AlarmID UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_int(compiledStatement, 1, AlarmID);
sqlite3_bind_text(compiledStatement, 2, [lblDate.text UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_int(compiledStatement, 3, databaseinterval);
sqlite3_bind_text(compiledStatement,4 , [newsound UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement, 5, [newmessage UTF8String], -1, SQLITE_TRANSIENT);
}
if (sqlite3_step(compiledStatement)!= SQLITE_DONE) {
NSLog(@"Save Error:%s",sqlite3_errmsg(database));
}
else {
sqlite3_reset(compiledStatement);
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"UIAlertView" message:@"Alarm Set" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
alert = nil;
}
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
}
-(IBAction)save{
if (lblDate.text == NULL && interval == NULL && newsound == NULL)
{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"UIAlertView" message:@"Set Date,interval,sound for alarm" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
alert = nil;
}
else {
[self saveInDatabase];
[self schedulealarm];
}
//[self.navigationController popViewControllerAnimated:YES];
}
@end
在appDelegate中,我为didReceiveNotification创建了一个方法。但通知不起作用。我的开火日期显示为空值。
可能是什么问题?我想将值传递给我存储在变量中的fireate。
答案 0 :(得分:0)
我认为设置fireDate时会出现问题,你可以试试这个:
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:day];
[components setMonth:month];
[components setYear:year];
[components setMinute:minutes];
[components setHour:hour];
NSDate *date = [calendar dateFromComponents:components];
localNotif.fireDate = date;