核心数据如何更新logging?

我有一些对象,就是像图像<< —>用户那样与对象用户mani-to-one有关系的图像。 现在,我想要做的,当用户login我显示一个button,每个图像添加到collections夹,当我点击这个button是运行此代码:

User * user = [[UserController sharedInstance] currentUser]; Image * image = (Image*)[user.managedObjectContext objectWithID:[self.yacht objectID]]; yacht.whoLiked = user 

问题是不是我在同一个控制器,但在主控制器之前,因为我所做的是加载在集合视图中的图像的拇指(并在此控制器加载数据库中的所有数据),然后当我按下拇指我去在另一个控制器,显示我的大图像和添加collections夹的button,当我按下,然后回到旧控制器的viewDidAppear旧控制器我重新加载每次数据从数据库,但我不能看到任何改变,如果我改变部分(控制器),我回来看看我看到的数据更新

这就是我如何从主控制器调用Db:

 - (void)fetchImages { NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Image"]; request.predicate = [NSPredicate predicateWithFormat:@"ANY whichCategories.name =[cd] %@", self.category.name]; NSSortDescriptor *sortName = [[NSSortDescriptor alloc] initWithKey:@"headline" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; request.sortDescriptors = [NSArray arrayWithObject:sortName]; NSError * error = nil; self.images = [self.database.managedObjectContext executeFetchRequest:request error:&error]; [self.collectionView reloadData]; } - (void)useDocument { if (![[NSFileManager defaultManager] fileExistsAtPath:[self.database.fileURL path]]) { // CREATE [self.database saveToURL:self.database.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) { [self fetchImages]; }]; } else if (self.database.documentState == UIDocumentStateClosed) { // OPEN [self.database openWithCompletionHandler:^(BOOL success) { [self fetchImages]; }]; } else if (self.database.documentState == UIDocumentStateNormal) { // USE [self fetchImages]; } } - (void)setDatabase:(UIManagedDocument *)database { if (_database != database) { _database = database; [self useDocument]; } } -(void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [self useDocument]; //[self.collectionView reloadData]; [UIView beginAnimations:@"" context:nil]; [UIView setAnimationDuration:0.5]; self.collectionView.alpha = 1; [UIView commitAnimations]; } 

为什么如果我回来,并返回代码的工作,否则就像我没有调用服务器刷新数组?

Triy与这个代码:

 NSFetchRequest *request = [[NSFetchRequest alloc] init]; [request setEntity:[NSEntityDescription entityForName:@"Favorits" inManagedObjectContext:moc]]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == %@", @"Some Title"]; [request setPredicate:predicate]; NSError *error = nil; NSArray *results = [moc executeFetchRequest:request error:&error]; YourObject *object = [results objectAtIndex:0]; object.title = @"Bla bla bla"; //save changes [moc save:&error]; if (error) { //Do something } 

这2个链接是有帮助的:

http://developer.apple.com/library/iOS/#documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/CoreDataFramework/Classes/NSFetchRequest_Class/NSFetchRequest.html

如果我没有误解你,问题是当你刷新数组时,你的数据不会被更新。

如果您从数据库重新加载,而您没有保存更改,那么您将获得数据库中的值。 你应该做:

 NSError *saveError = nil; [user.managedObjectContext save:&saveError]; if (error) { //Do whatever } 

在再次调用函数来从数据库重新加载数组之前,您应该使用此代码。 这个地方取决于你,但是如果你在调用viewcontroller的时候只调用了从数据库刷新数组,你可以在离开viewController时保存数据。