将新记录添加到数据库(sqlite)并更新TableViewController时,Objective-C通知

时间:2016-01-28 01:09:37

标签: ios objective-c sqlite

我正在解析从远程通知收到的数据,然后立即将其保存在AppDelegate内的数据库中。但是当我在应用程序运行时收到新的远程通知时,UITableView无法使用新数据进行更新。

我关注如何使用sqlite tutorial。但是当它通知何时将新元素添加到数据库时,它对我不起作用,因为我的案例是AppDelegateUITableViewController,教程的案例是ViewController和{ {1}}

这是本教程在实施协议后的工作方式

UITableViewController

就我而言,它将是

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    EditInfoViewController *editInfoViewController = [segue destinationViewController];
    editInfoViewController.delegate = self;
}

我将收到此错误:

  

无法用a初始化'AppDelegate * __strong'类型的变量   '__kindofUIViewCOntroller *'

类型的右值

我可以将什么替代品用于prepareForSegue?

我有点迷失在这里,所以我会感激我能得到的任何帮助。

2 个答案:

答案 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]);

这是第一个问题,不确定是否会再有问题。