0

我使用 NSFetchedResultsController 重写了我的项目。它几乎可以工作。但是我想做一些事情,这在以前的代码中很容易,但我不知道在哪里编写代码。

当我的 UITableView 的数据源为空时,我想添加一个带有消息“要在 TableView 中添加对象,请按 + 按钮”的子视图。

如果没有可显示的内容或用户删除了 TableView 的所有对象,则该子视图应在启动时出现。

最好的地方是 numberOfRowsInSection (我只有一个部分),类似于

id <NSFetchedResultSectionInfo> sectionInfo = [[[self fetchedResultsController] sections] objectAtIndex:section];

if ([sectionInfo numberOfObjects] == 0)
{
AddSubview
} else {
remove subview if needed
}
...

谢谢你的帮助。

最好的问候,
雅克

4

1 回答 1

0

假设您有一个CoreData名为Countries. 这个国家有属性countryName。要检查是否存在 type 的实体Countries,我调用以下方法:

- (BOOL)countryExistsWithName:(NSString *)countryName{

    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Countries"];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"countryName == %@, countryName];
    [fetchRequest setPredicate:predicate];

    NSError *error;
    NSUInteger count = [self.managedObjectContext countForFetchRequest:fetchRequest error:&error];

    if (count == NSNotFound) {
        // error
        NSLog(@"error");
        return NO;
    }
    if (count > 0)  {
        // at least one country found
        return YES;
    }

    return NO;
}

编辑:如果您不想要求某个countryName,您只需检查 all Countries,执行以下获取:

- (NSInteger )countAllCountries{

    // We use an NSPredicate combined with the fetchedResultsController to perform the search
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Countries"];

    NSSortDescriptor *sortDescriptor    = [[NSSortDescriptor alloc] initWithKey:@"countryName" ascending:YES];
    fetchRequest.sortDescriptors        = @[sortDescriptor];

          NSError *error;
    NSUInteger count = [self.managedObjectContext countForFetchRequest:fetchRequest error:&error];

    if (count == NSNotFound) {
        // error
        NSLog(@"error");
        return 0;
    }
    if (count > 0)  {
        // at least one country found
        return count;
    }

    return count;

}

使用这种方法,您应该很容易确定您的数据源是否为空。希望能帮助到你

于 2013-06-12T08:24:45.083 回答