Чтобы обойти некоторые проблемы, присущие NSFetchedResultsController, я решил изменить свой UITableViewController на UIViewController и просто добавить свойство tableView. Я не использую раскадровки, и я делаю все программно. Цель этого состоит в том, чтобы иметь представление таблицы, которое оставляет около 44 пикселей пустого пространства (поэтому я могу разместить там универсальный заголовок) по оси y сверху. В основном, я пытаюсь сдвинуть таблицу вниз на 44 px.Перенос NSFetchedResultsController в UIViewController из UITableViewController
Проблема в том, что я получаю ошибки контрольной точки на fetchedResultsController. Вот мой код:
ViewController.h
@interface ToDoViewController : UIViewController <UITableViewDelegate, SettingsViewControllerDelegate, NSFetchedResultsControllerDelegate, UITableViewDataSource>
@property (nonatomic) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic) NSFetchedResultsController *fetchedResultsController;
@end
ViewController.m
@implementation ToDoViewController
@synthesize managedObjectContext;
@synthesize fetchedResultsController = _fetchedResultsController;
@synthesize tableView = _tableView;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
UINavigationItem *i = [self navigationItem];
[i setTitle:@"Task List"];
_tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 44, 320, 548) style:UITableViewStyleGrouped];
[self.view addSubview:self.tableView];
self.tableView = self.fetchedResultsController.delegate;
}
return self;
-(void) viewDidLoad{
[super viewDidLoad];
NSError *error;
if (![[self fetchedResultsController] performFetch:&error]){
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1);
}
[self.tableView setDelegate:self];
[self.tableView setDataSource:self];
[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:baseColor];
[self.view setBackgroundColor:baseColor];
- (NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Tasks" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *isCompleted = [[NSSortDescriptor alloc]initWithKey:@"sectionString" ascending:NO];
NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"dateCreated" ascending:YES];
[fetchRequest setSortDescriptors:@[isCompleted, sort]];
[fetchRequest setFetchBatchSize:20];
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"sectionString"
cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;
return _fetchedResultsController;
}
Проблема в том, что представление таблицы не получает заселена с деталями, которые должны который будет выбран nsfetchedresultscontroller. Я не знаю, почему это ... возможно, потому что табличное представление не является делегатом или чем-то еще?
Я сделал все, что уже. ..:/ – EvilAegis
Я чувствую, что проблема заключается в том, что я добавляю табличное представление как подвью, и NSFC не знает, чтобы отправить его в tableview. – EvilAegis
NSFC не отправляет данные в tableview, он просто содержит данные , В представлении таблицы следует просить контроллер вашего представления предоставить данные через UITableViewDataSource Protocol. – Kevin