1

NSFetchedResultsController用来从中获取数据Core Data并将它们显示在UITableView. 我的NSFetchedResultsController样子是这样的:

- (NSFetchedResultsController *) fetchedResultsController
{
    if (_fetchedResultsController != nil)
    {
        return _fetchedResultsController;
    }

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"PlanPreparation"
                                              inManagedObjectContext:_context];
    [fetchRequest setEntity:entity];

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"plan_id == %@", _planCycleID];
    [fetchRequest setPredicate:pred];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects: sortDescriptor, nil];

    fetchRequest.sortDescriptors = sortDescriptors;

    _fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:fetchRequest managedObjectContext:_context sectionNameKeyPath:nil cacheName:nil];
    _fetchedResultsController.delegate = self;

    // but if there is no results I am making another fetch by another type of NSManagedObject    
    if (_fetchedResultsController.fetchedObjects.count == 0)
    {
        NSFetchRequest *fetchRequest1 = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity1 = [NSEntityDescription entityForName:@"Preparation"
                                                  inManagedObjectContext:_context];
        [fetchRequest1 setEntity:entity1];
         NSPredicate *pred = [NSPredicate predicateWithFormat:@"ismer == %@", [NSNumber numberWithInt:1]];
        [fetchRequest1 setPredicate:pred];

        NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
        NSArray *sortDescriptors = [[NSArray alloc] initWithObjects: sortDescriptor, nil];

        fetchRequest1.sortDescriptors = sortDescriptors;

        _fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:fetchRequest1 managedObjectContext:_context sectionNameKeyPath:nil cacheName:nil];
        _fetchedResultsController.delegate = self;        

        //return _fetchedResultsController;
    }

    return _fetchedResultsController;
}

如果我在第一次尝试提取后没有检索到某些东西,我需要设置另一个提取。在-cellForRowAtIndexPath我需要显示数据取决于类型NSManagedObjectObject

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    if ([[self.fetchedResultsController objectAtIndexPath:indexPath] isKindOfClass:[PlanPreparation2 class]])
    {
        PlanPreparation2 *planDrug = (PlanPreparation2 *)[self.fetchedResultsController objectAtIndexPath:indexPath];
        CDPreparation *prep = (CDPreparation *)[[PTDataManager sharedManager]getDrugByID:planDrug.guid];
        cell.textLabel.text = [NSString stringWithFormat:@"%@", prep.name];
    }
    else
    {
        CDPreparation *drug = (CDPreparation *)[self.fetchedResultsController objectAtIndexPath:indexPath];
        cell.textLabel.text = [NSString stringWithFormat:@"%@", drug.name];
    }

    return cell;
}

但是日志显示-isKindOfClass:在这里不起作用,我根本没有引用。

问题:

我怎样才能找出类型NSManagedObjectObject

4

1 回答 1

4

在此处输入图像描述

如图所示,在该实体的数据模型检查器中更改名称和类

数据模型检查器中的名称和类字段必须与实体表的名称相同。

然后在你可以比较之后

if([(NSManagedObject *)[self.fetchedResultsController objectAtIndexPath:indexPath] isKindOfClass:[Category class]])

因为“类别”在我的情况下是类,你可以在上面写下选择你自己的类 [PlanPreparation2 类]

如果您仍然遇到问题,请在下面评论

于 2013-09-24T09:36:43.723 回答