2012-07-08 37 views
2

我想在每次输入特定方法时创建一个新的UILocalNotification。我会认为这将不得不通过读取数组或类似的东西来完成,但我无法弄清楚。我怎样做这样的事动态没有硬编码类似如下:创建多个UILocalNotifications

-(void) createNotification 
{ 
UILocalNotification *notification1; 
} 

现在我想能够创建notification2,notification3,每个I输入createNotification时间等等等等。出于具体原因,我可以在不取消全部取消适当通知的情况下取消通知。

以下是我所尝试的,也许我的方式......也许不是。无论哪种方式,如果有人可以提供一些输入,将不胜感激。谢谢!

-(void) AddNewNotification 
{ 

UILocalNotification *newNotification = [[UILocalNotification alloc] init]; 
//[notificationArray addObject:newNotification withKey:@"notificationN"]; 
notificationArray= [[NSMutableArray alloc] init]; 

[notificationArray addObject:[[NSMutableDictionary alloc] 
        initWithObjectsAndKeys:newNotification,@"theNotification",nil]]; 

    } 

回答

2

你几乎在那里:使用数组当然是正确的做法!唯一的问题是每次通过AddNewNotification方法时都要继续创建一个新的数组实例。您应该使notificationArray成为实例变量,并将其初始化代码notificationArray= [[NSMutableArray alloc] init];移动到声明notificationArray的类的指定初始化程序。

如果您希望为每个通知添加一个可以稍后查找的个人密钥,请使用NSMutableDictionary而不是NSMutableArray。重新写AddNewNotification方法如下:

-(void) addNewNotificationWithKey:(NSString*)key { 
    UILocalNotification *newNotification = [[UILocalNotification alloc] init]; 
    [notificationDict setObject:[[NSMutableDictionary alloc] 
       initWithObjectsAndKeys:newNotification,@"theNotification",nil] 
     forKey:key]; 

} 

当你调用addNewNotificationWithKey:方法,你能够提供新添加的通知的关键,例如

[self addNewNotificationWithKey:@"notification1"]; 
[self addNewNotificationWithKey:@"notification2"]; 

等。

+0

感谢您的快速回复,出色的一点。像viewDidLoad应该做的alloc技巧?至于其他代码,所以你说我可以通过做我已经做的事情来创建newNotification1,newNotification2?如果我将UILocalNotification变量的名称编写为“newNotification”,那怎么可能呢?它不会总是被称为?谢谢你,对不起,如果这太容易了......只是有点困惑 – 2012-07-09 00:06:28

+0

@AlexG你可以在'viewDidLoad'中进行初始化,但指定的初始化器通常是一个更好的地方。将通知插入数组的方法中的通知*变量*的名称完全没有关系:编译该方法后,该变量的名称就消失了!通知数组将包含您插入的所有项目。您可以根据需要对它们进行迭代,删除不再需要的项目等等。 – dasblinkenlight 2012-07-09 00:10:56

+0

啊你是对的,这是有道理的。最后一个问题,无论如何我都会接受你的答案,但是如果我想取消这些方法之外的通知,这不会造成问题。像取消notification1和notification2但不通知3? – 2012-07-09 00:14:07