さて、私は何日もこれにいて、私が間違っていることを理解することができないようです。
私が欲しいのは、行が選択されたときに更新するコアデータです。私はそれを理解しましたが、それからテーブルビューを更新して変更を表示したいと思います。それが私が問題を抱えているところです。走る:
[NSFetchedResultsController deleteCacheWithName:@"Root"];
fetchedResultsController = nil;
NSError *error = nil;
if(![[self fetchedResultsController] performFetch:&error]){
}
[[self tabVe] reloadData];
データを更新した後、テーブルビューは更新されません。ビューを変更して戻ってきますが、スタックしています。スクロールしてさらに行を選択することはできますが、テーブルが更新されることはありません。セグメント化されたコントローラーがあり、データを希望どおりに変更するとうまく機能しますが、テーブルがスタックすると言う理由は、行を選択した後、セグメント化されたコントローラーがテーブルの内容を変更しないためです。行が選択される前に。
編集モードではこれを行っていません。選択されたときに値を更新するだけです。これが私のコードです:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [[self.fetchedResultsController sections] count];
}
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
return [sectionInfo name];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
return [sectionInfo numberOfObjects];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tabVe deselectRowAtIndexPath:indexPath animated:YES];
if(cyc == 1){
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if(cell.accessoryType == UITableViewCellAccessoryCheckmark){
cell.accessoryType = UITableViewCellAccessoryNone;
}else {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
Items *anItem = [self.fetchedResultsController objectAtIndexPath:indexPath];
anItem.need = @"0";
NSError *error = nil;
if(![managedObjectContext save:&error]){
}
[NSFetchedResultsController deleteCacheWithName:@"Root"];
fetchedResultsController = nil;
NSError *error = nil;
if(![[self fetchedResultsController] performFetch:&error]){
}
[[self tabVe] reloadData];
}
}
}
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = [[managedObject valueForKey:@"name"] description];
cell.detailTextLabel.text = [[managedObject valueForKey:@"notes"] description];
if([[managedObject valueForKey:@"need"] description] == @"0"){
cell.accessoryType = UITableViewCellAccessoryNone;
}else if([[managedObject valueForKey:@"need"] description] == @"1"){
cell.accessoryType = UITableViewCellAccessoryNone;
}
}
私は誰かが私がこれを理解するのを手伝ってくれることを望んでいます。cycは、セグメント化されたコントローラーの現在の位置を示すNSIntegerです。現在、cycが1に等しい場合にのみアイテムを更新しています。
編集:
まですべてがスムーズに実行されます
if(![managedObjectContext save:&error]){
}
実行されます。その後、テーブルが動かなくなったようです。