Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS:核心数据滞后…?_Ios_Core Data_Nsfetchedresultscontroller - Fatal编程技术网

iOS:核心数据滞后…?

iOS:核心数据滞后…?,ios,core-data,nsfetchedresultscontroller,Ios,Core Data,Nsfetchedresultscontroller,我正在构建一个预算应用程序,在核心数据方面遇到了一些问题。我有一个表结构,其中有主要类别和子类别。每个组合都有一个名称,每个组合只有一个名称有效。i、 e.我可以在几个主要类别中购买子类别保险,但在一个主要类别中不能购买两次保险。 因此,我可以添加、删除和重命名主要类别和子类别,而不会出现问题。但是,当我重命名一个主类别并再次打开它以查看其子类别(这是在导航控制器中)时,您选择一个主类别,然后在下一个视图中看到这些子类别,它们暂时不可见。几秒钟后,通过重新打开子类别重新加载,它们将再次可见 我正

我正在构建一个预算应用程序,在核心数据方面遇到了一些问题。我有一个表结构,其中有主要类别和子类别。每个组合都有一个名称,每个组合只有一个名称有效。i、 e.我可以在几个主要类别中购买子类别保险,但在一个主要类别中不能购买两次保险。 因此,我可以添加、删除和重命名主要类别和子类别,而不会出现问题。但是,当我重命名一个主类别并再次打开它以查看其子类别(这是在导航控制器中)时,您选择一个主类别,然后在下一个视图中看到这些子类别,它们暂时不可见。几秒钟后,通过重新打开子类别重新加载,它们将再次可见

我正在使用FetchedResultsController。知道我在哪里漏掉了什么吗?我需要在什么地方重新装东西吗?但是我认为在使用FetchedResultsController时不必重新加载表

以下是相关的代码部分:

#pragma mark Initializer and view setup
- (void)setupFetchedResultsController
{
    NSError *error = nil;
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SpendingCategory"];
    request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"position" ascending:YES]];
    [self.mainCategory.managedObjectContext executeFetchRequest:request error:&error];
    request.predicate = [NSPredicate predicateWithFormat:@"belongsToMainCategory.name = %@", self.mainCategory.name];

    self.fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:request
                                                                       managedObjectContext:self.mainCategory.managedObjectContext
                                                                         sectionNameKeyPath:nil
                                                                                  cacheName:nil];
}

- (void)viewDidLoad
{
    //Edit/Done button
    UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Edit", nil) style:UIBarButtonItemStyleBordered target:self action:@selector(editTable:)];
    [self.navigationItem setRightBarButtonItem:editButton];
    [super viewDidLoad];

    self.sumTitleLabel.text = [NSString stringWithFormat:@"%@%@", NSLocalizedString(@"Budget/Month", nil), @":"];
    self.categorySumTitleLabel.text = [NSString stringWithFormat:@"%@%@", self.mainCategory.name, @":"];

    [self refreshIcon];
    self.iconButton.hidden = YES;
    self.iconImage.hidden = NO;

    self.mainCategoryNameTextField.text = self.mainCategory.name;
    self.mainCategoryNameTextField.delegate = self;
}

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.sumLabel.text = [[DatabaseFetches budgetPerMonthForManagedObjectContext:self.mainCategory.managedObjectContext] getLocalizedCurrencyString];
    self.categorySumLabel.text = [[self.mainCategory getMonthlyCostsOfAllSpendingCategories] getLocalizedCurrencyString];
    [self refreshIcon];
    [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
}

如果您的UI没有更新,可能是因为数据仍在缓存中。可能您的详细视图控制器未正确解除分配

在显示以下内容之前,只需重新加载表视图,没有什么害处:

-(void)viewWillAppear:(BOOL)animated:
   [super viewWillAppear:animated];
   [self.tableView reloadData];
}

然而,您的表视图应该是全新的,所以这应该是自动发生的。检查视图层次结构逻辑。

您已经发布了setupFetchedResultsController的代码,但没有显示从何处调用它。-voidsetMainCategory:MainCategory*MainCategory{//TODO\U MainCategory=MainCategory;self.title=MainCategory.name;[self setupFetchedResultsController];}