正在寻找一种方法来更改 UILocalNotification 的“关闭”按钮文字/功能...
我发现不可能从另一个对象访问/调用text / function,尽管子类化 UILocalNotification应该允许实现方法覆盖 ...更不用说创建访问者来获取/设置“关闭”按钮文本字段。
你们对此有何看法? Apple会怎样?
有人试过吗?...
编辑:12/21/2011 12:01 PM
我提出的问题涉及对oop的理解:延迟/早期绑定,动态方法查找,以及声明的类型与运行时类型字段和方法处理。
UILocalNotification的子类化确实工作......
UILocalNotificationExampleSubclass * example = [UILocalNotificationExampleSubclass init];
...设备确实创建一个对象,但类型为UILocalNotification
而不是UILocalNotificationExampleSubclass
。
我正在寻找对UILocalNotification.m文件方法的深入了解。
如果没有拥有自己的方法,那么(名称请)对象采用UILocalNotification的实例,使用其字段,并显示对象 (请注明)我们在屏幕上看到了吗?
答案 0 :(得分:9)
UILocalNotification
只是通知信息的存储空间。它没有执行任何操作。
此外,您的应用程序不会显示通知。另一个过程呢。所以继承UILocalNotification
只是没用。
编辑于12月22日,17:53 UTC + 1:
是的,您可以继承UILocalNotification
。但UILocalNotification
是一个抽象类,并且没有实现任何属性。覆盖alloc
方法,因此它返回一个私有子类UILocalNotification
的实例。这就是为什么你不能实例化UILocalNotificationExampleSubclass
。
但是,仍然没有指向子类UILocalNotification
,因为当您使用-[UIApplication scheduleLocalNotification:]
安排通知或使用-[UIApplication presentLocalNotification:]
立即显示通知时,操作系统副本通知。
该副本存储在由系统管理的另一个进程中,该进程使用自己的私有存储机制。 UILocalNotification
只是一大堆属性的存储,它们将被序列化并从应用程序发送到操作系统。
现在,我们有其他进程存储所有已调度的本地通知并等待触发通知。当发生这种情况时,该过程将检查您的应用程序是否在前台。
UILocalNotification
类的属性。UILocalNotification
的新实例的应用程序。然后,UIApplication
共享实例将访问其delegate
属性并检查该委托是否实现application:didReceiveLocalNotification:
。如果是,您将收到通知,并可以使用该通知执行任何操作。例如,您可以选择使用警报视图显示通知。配置和显示警报视图可以这样完成:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
UIAlertView *alertView =
[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Alert", nil)
message:NSLocalizedString(notification.alertBody, nil)
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:NSLocalizedString(@"OK", nil), nil];
[alertView show];
[alertView release]; // unless your project uses Automatic Reference Counting
}
我希望这个更长的回答确实回答了你的问题,如果我说的是真的。