예산 앱을 구축하고 핵심 데이터에 몇 가지 문제가 있습니다. 나는 주요 카테고리와 하위 카테고리가있는 테이블 구조를 가지고있다. 각각 하나의 이름이 있으며 조합 당 하나의 이름 만 유효합니다. (즉, 몇 가지 주요 카테고리에서 하위 카테고리 보험을 가질 수 있지만 한 가지 주요 카테고리에서는 두 번 보험이 적용되지 않습니다). 그래서 주요 카테고리 및 하위 카테고리를 문제없이 추가, 제거 및 이름을 바꿀 수 있습니다. 그러나 메인 카테고리의 이름을 변경하고 하위 카테고리를 보려면이 카테고리를 다시 열면 (이것은 내비게이션 컨트롤러에 있습니다. 메인 카테고리를 선택하고 다음보기에서 하위 카테고리를 볼 수 있습니다.) 잠시 동안 아무 것도 보이지 않습니다. 잠시 후 하위 범주를 다시 열어 "다시로드"하면 다시 볼 수 있습니다.iOS : 핵심 데이터 지연 ...?
나는 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];
}
'setupFetchedResultsController'에 대한 코드를 게시했지만 어디에서 호출되었는지는 표시되지 않았습니다. – morningstar
- (무효) setMainCategory : (메인 카테고리 *) mainCategory { // TODO _mainCategory = mainCategory; self.title = mainCategory.name; [self setupFetchedResultsController]; } – MichiZH