更新表格视图单元格中的核心数据值后如何刷新

Posted

技术标签:

【中文标题】更新表格视图单元格中的核心数据值后如何刷新【英文标题】:How to refresh after updating core data value in table view cell 【发布时间】:2013-01-02 07:01:31 【问题描述】:

我在我的应用程序中使用核心数据。我有一个两个视图控制器一个视图控制器在选择书中的任何一个后显示书名列表移动到第二个视图控制器以使用更新按钮将值更新为 1将显示在核心数据表中。现在回到主视图控制器,选择同一本书后不会显示 secondviewcontroller 中的值,但核心数据表的值为 1。如何在具有核心数据表值的表视图中重新加载主视图控制器 .plz 任何人知道的帮帮我。

下面是源代码

- (void)viewDidLoad

  [super viewDidLoad];

  if(dictionary!=nil)//net is not connected fetch core data to display the booknames
  
     UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@" Warning Message" message:@"You are not connect to internet so becoz of loading default values" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
     [alert show];
     [self fetchValueFromDatabase];

        



-(void)fetchValueFromDatabase


 NSFetchRequest *fech=[[NSFetchRequest alloc]init];
 NSEntityDescription *entity=[NSEntityDescription entityForName:@"Bookname" inManagedObjectContext:self.managedObjectContext];
 [fech setEntity:entity];
 NSError *savingError=nil;
 NSArray *allBook=[self.managedObjectContext executeFetchRequest:fech error:&savingError];

 NSLog(@"Array count value:%i",allBook.count);

 coreBookName=[allBook valueForKey:@"bookName"];
 NSLog(@"all value:%@",coreBookName);

 for(NSString *key in coreBookName)
 
     NSLog(@"Key value:%@",key);  

    [insertBookname addObject:key];
 

 coreVoteCount=[allBook valueForKey:@"vote"];
 NSLog(@"All vote value:%@",coreVoteCount);
 for(NSString *key in coreVoteCount)
 
    [bookCount addObject:key];
    NSLog(@"Key value:%@",key);
 

 for(NSArray *key in allBook)
 
     [addItems addObject:key];
     NSLog(@"All items:%@",key);
 



- (void)viewWillAppear:(BOOL)animated
 
    [super viewWillAppear:animated];

    [self.tableview1 reloadData];

【问题讨论】:

【参考方案1】:

从 (void)viewWillAppear:method 调用您的以下方法

[self fetchValueFromDatabase];//call this from ViewWillAppear

让我知道它是否有效...

编码愉快。!!!!

【讨论】:

【参考方案2】:

您在 viewDidLoad [self fetchValueFromDatabase];[self.tableview1 reloadData]; 中调用了这个 viewWillAppear 这就是为什么你没有在你的表。

您应该在函数 fetchValueFromDatabase

的末尾调用 [self.tableview1 reloadData];
-(void)fetchValueFromDatabase


 NSFetchRequest *fech=[[NSFetchRequest alloc]init];
 NSEntityDescription *entity=[NSEntityDescription entityForName:@"Bookname"  inManagedObjectContext:self.managedObjectContext];
 [fech setEntity:entity];
 NSError *savingError=nil;
 ........................
 .......................

 .......................

 [self.tableview1 reloadData];


【讨论】:

无法重新加载数据。停止模拟器,然后再次运行模拟器,它将从核心数据表中检索值。 您是否遇到任何错误或崩溃,按我说的做。但首先检查您是否使用从 coredata 更新的相同数组来填充表,如果是,则 NSLog 您的数组以确保它在调用表上的 reloadData 之前不为空。 没有错误。NSLog 只打印最旧的核心数据表值我能做什么 这意味着你的核心数据没有新数据,为了测试一切是否正常,在调用 fetchValueFromDatabase 之前在你的核心数据中添加一个虚拟数据,然后按照我告诉你的那样继续,并放一些 NSLogs在您的表 Delegate numberOfRowsInSection 中,希望您根据您更新的数据数组设置行。 如果您的表每次都重新加载新的虚拟数据,那么一切都很好,并确保您将委托和数据源设置为表的自身

以上是关于更新表格视图单元格中的核心数据值后如何刷新的主要内容,如果未能解决你的问题,请参考以下文章