我正在解析从远程通知收到的数据,然后立即将其保存在AppDelegate
内的数据库中。但是当我在应用程序运行时收到新的远程通知时,UITableView
无法使用新数据进行更新。
我关注如何使用sqlite tutorial。但是当它通知何时将新元素添加到数据库时,它对我不起作用,因为我的案例是AppDelegate
和UITableViewController
,教程的案例是ViewController
和{ {1}}
这是本教程在实施协议后的工作方式
UITableViewController
就我而言,它将是
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
EditInfoViewController *editInfoViewController = [segue destinationViewController];
editInfoViewController.delegate = self;
}
我将收到此错误:
无法用a初始化'AppDelegate * __strong'类型的变量 '__kindofUIViewCOntroller *'
类型的右值
我可以将什么替代品用于prepareForSegue?
我有点迷失在这里,所以我会感激我能得到的任何帮助。
答案 0 :(得分:2)
是的,这个错误是显而易见的,因为AppDelegate不是UIViewController。 您正试图推送一个AppDelegate对象,这就是您收到错误的原因。
在您的情况下,如果您想在AppDelegate中保存新收到的通知的数据,那么只需在AppDelegate中创建一个方法。
然后,当您收到通知时,只需调用该方法即可将数据保存到数据库中。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
if (application.applicationState == UIApplicationStateActive) {
NSLog(@"Push received in Active State: %@", userInfo);
}
else {
NSLog(@"Push received in InActive State: %@", userInfo);
}
[self saveDataToDatabse:userInfo];
}
#pragma mark - Private methods
-(void)saveDataToDatabse:(id)data {
// your logic here
[[NSNotificationCenter defaultCenter] postNotificationName:@"NewDataSaved" object:nil];
}
在ViewController.m中,在viewDidLoad方法中添加观察者。
- (void)viewDidLoad{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadTable:) name:@"NewDataSaved" object:nil];
}
-(void)reloadTable:(NSNotification)notification {
// your logic here
[self.tableView reloadData];
}
答案 1 :(得分:1)
您正在尝试将ViewController转换为AppDelegate类:
AppDelegate *appDelegate = [segue destinationViewController];
您应该查看destinationViewController并使用正确的类类型。如果您不知道尝试记录destinationViewController:
NSLog("viewController: %@", [segue destinationViewController]);
这是第一个问题,不确定是否会再有问题。