通过FetchedResultsController更新实体属性

时间:2014-05-24 14:35:30

标签: ios objective-c core-data nsfetchedresultscontroller

我提出了一个收集用户账单和付款的申请。但它没有"编辑"属性所以我想用"编辑"更新我的应用程序属性。

我有一个tableviewcontroller,它列出了用户的所有付款。如果用户单击该单元格应用程序,请执行"详细信息付款"查看控制器。

首先,我的添加付款视图控制器准备了segue代码;

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{


if ([[segue identifier] isEqualToString:@"addKredi"]) {

    UINavigationController *navigationController = [segue destinationViewController];

    ESMAddKrediViewController *addKrediViewController = (ESMAddKrediViewController *) navigationController.topViewController;

    Kredi *addKredi = [NSEntityDescription insertNewObjectForEntityForName:@"Kredi" inManagedObjectContext:[self managedObjectContext]];

    Odeme *addKrediToOdeme = [NSEntityDescription insertNewObjectForEntityForName:@"Odeme" inManagedObjectContext:[self managedObjectContext]];

    addKrediViewController.addKredi = addKredi;

    addKrediViewController.addKrediToOdeme = addKrediToOdeme;
}

有添加信用视图控制器代码;

 static NSString *kategoriKredi = @"Banka Kredilerim";
_addKredi.krediAdi = _txtKrediAdi.text; //Kredi Entity
_addKrediToOdeme.odemeAdi = _txtKrediAdi.text; //Odeme Entity
_addKrediToOdeme.kategori = kategoriKredi;

我的tableviewcontroller通过" Odeme"提取用户所有付款实体。

我的tableviewcontroller代码有详细的ViewController;

如果用户选择信用类型付款(Kredi),我的应用会使用这些代码检查类别并向详细信息视图控制器发送一些信息;

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

Odeme *odeme = [self.fetchedResultsController objectAtIndexPath:indexPath];

if ([odeme.kategori isEqualToString:@"Kredi Kartlarım"]){

    [self performSegueWithIdentifier:@"toTaksitler" sender:nil];
}

if ([odeme.kategori isEqualToString:@"Faturalarım"]){

    [self performSegueWithIdentifier:@"toFaturaDetay" sender:nil];
}

if ([odeme.kategori isEqualToString:@"Banka Kredilerim"]){

    [self performSegueWithIdentifier:@"toKrediDetay" sender:nil];
}

我将odemeAdi发送到krediViewController.krediAdi

 if ([[segue identifier] isEqualToString:@"toKrediDetay"]) {


    ESMKrediViewController *krediViewController = [segue destinationViewController];

    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

    Odeme *selectedKredi = (Odeme *)[self.fetchedResultsController objectAtIndexPath:indexPath];

    krediViewController.odendi = selectedKredi.odendi;

    krediViewController.krediAdi = selectedKredi.odemeAdi;

    krediViewController.selectedKredi = selectedKredi;

    krediViewController.navigationItem.title = selectedKredi.odemeAdi;


}

我可以捕获Credit的名称,并在我的Detail ViewController中使用这些代码获取信用详细信息; (在CreditDetailViewController中)

#pragma mark - Fetched Results Controller Section

-(NSFetchedResultsController *)fetchedResultsController{

if (_fetchedResultsController !=nil) {
    return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];

NSManagedObjectContext *context = [self managedObjectContext];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Kredi" inManagedObjectContext:context];

[fetchRequest setEntity:entity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"krediAdi" ascending:YES];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"krediAdi == %@ ",krediAdi];

[fetchRequest setPredicate:predicate];

NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

fetchRequest.sortDescriptors = sortDescriptors;

_fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];

_fetchedResultsController.delegate = self;

return _fetchedResultsController;

}

我的应用程序可以通过这种方式显示所有关于所选信用的属性。我试图解释我的所有代码。但我知道它的复杂问题,我的英语不足以解释清楚。但也许有人可以阅读这些代码并帮助这个绝望的人。

所以有我的问题。

我想编辑Credit Detail View Controller。我怎样才能改变像krediAdi这样的Kredi实体属性?

我在此详细信息视图控制器中获取了所有Kredi实体属性,但我无法更新或覆盖属性。我卡在那里。

1 个答案:

答案 0 :(得分:0)

我用这段代码解决了我的问题;

[[[self.fetchedResultsController fetchedObjects]objectAtIndex:0]setBorcAdi:self.txtBorcAdi.text];

BorcAdi是Borclar实体的财产。

您可以使用此代码编辑或更改实体属性。

注意:我使用的是Predicate,我只得到1个结果,所以我可以使用objectAtIndex:0来达到它。