2016-05-09 36 views
0

我想为特定项目设置警报并让UILocalNotification从我的表格视图控制器打开特定项目并显示其详细信息。换句话说,当出现通知时,我希望能够点击“显示项目”,而不是显示所有项目的列表,而是希望查看该特定项目的详细信息。UILocalNotification为特定项目打开详细视图控制器

为了这个工作,我需要存储关于特定项目(标题,索引等)的信息。我该怎么做?将我的物品的标题存储在UILocalNotification.userInfo

回答

2

添加信息

目标C

localNotification.userInfo [email protected]{@"title":title,@"index":index}; 

斯威夫特

var userInfo = [String:String]() 
userInfo["title"] = title 
userInfo["index"] = index 
notification.userInfo = userInfo 

要获取信息时,通知到达

目标C

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 
    NSLog(@“title = %@”,notification.userInfo[@"title"]); 
    NSLog(@“index = %@”,notification.userInfo[@"index"]); 
} 

斯威夫特

func application(application: UIApplication!, didReceiveLocalNotification notification: UILocalNotification!) { 
    println(notification.userInfo?["title"]) 
    println(notification.userInfo?["index"]) 
} 

******** ********编辑

传递从通知的用户信息 “标题” 和 “指标” 到Table View Controller

目标C

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"BookNotification" object:notification.userInfo] 
    // or update table view data source 
} 

夫特

func application(application: UIApplication!, didReceiveLocalNotification notification: UILocalNotification!) { 
    NSNotificationCenter.defaultCenter().postNotificationName("BookNotification", object:notification.userInfo) 
    // or update table view data source 
} 

Table View Controller增加观察员的时候通知到获得 “冠军” 和 “指标”,那么更新Table View Controllerdatasource和重装tableview

Table View Controller 目标C

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(receiveBookNotification:) 
    name:@"BookNotification" 
    object:nil]; 


- (void) receiveTestNotification:(NSNotification *) notification 
{ 
    NSString *title = notification.userInfo[@"title"]; 
    NSString *title = notification.userInfo[@"index"]; 
    // Update data source and reload 
} 

斯威夫特

NSNotificationCenter.defaultCenter().addObserver(self, selector: "receiveBookNotification:", name:"BookNotification", object: nil) 


func receiveTestNotification(notification: NSNotification) { 
    let title = notification.userInfo?["title"] 
    let index = notification.userInfo?["index"] 
    // Update data source and reload 
} 
+0

谢谢!当我想在通知到达时获取信息时,我想将标题从通知的userInfo传递到Table View Controller。我该怎么做呢?使标题成为一个全局变量?最佳做法是什么? – Daniel

+0

答案更新以反映“将通知的userInfo标题传递给表视图控制器” – Sudhir

+0

谢谢!我试过这个。添加到viewDidLoad()以下内容:NSNotificationCenter.defaultCenter()。addObserver(self,selector:#selector(RemindersMainVC.receiveReminderNotification),name:“ReminderNotification”,object:nil)。一切正常,receiveTestNotification()确实被调用,但通知参数为零。 – Daniel

2

是的,你可以这样做。本地通知的userInfo属性用于将您需要的任何信息传递给通知处理程序。

如果您想让按钮显示给用户,您将需要为您的本地通知添加操作,并且您还必须处理通知在应用处于前台时触发的情况,通知显示给用户。

+0

看起来很好,你可以做到这一点。! –

+0

如果您在Google上搜索过,则称之为“深层链接”:-) –

+0

网上的示例似乎表明userInfo是一本词典。是这样吗?通常在这种情况下会使用哪些密钥? – Daniel

相关问题