2015-04-21 2 views
0

У меня есть NSFetchedResultsController в представлении таблицы и пытаюсь вызвать его с другого контроллера, но я получаю сообщение об ошибке.IOS/XCODE: вызов метода NSFetchedResultsController в другом классе

Я импортировал tableVC в otherVC но я получаю «Нет известного метода класса для селектора„fetchedResultsController“. Можно ли определить, что я делаю неправильно? Спасибо.

code in tableVC.h 
-(NSFetchedResultsController *)fetchedResultsController; 
tableVC.m 
-(NSFetchedResultsController *)fetchedResultsController { 
    if (_fetchedResultsController==nil){ 
     NSFetchRequest *fetchRequest= [[NSFetchRequest alloc] init]; 
     ... 
    return _fetchedResultsController; 
} 
otherVC.m 
#import "tableVC.h" 

    [tableVC fetchedResultsController]; 

Спасибо за любые предложения.

ответ

2

«ни один из известных метода класса для селектора» не означает, что вы звоните, не метод экземпляра метода класса.

метода класса определяется с ведущим знаком +, и ваш fetchedResultsController в tableVC.h определяются с аль eading - знак, указывающий, что это метод экземпляра.

Решение заключается в том, чтобы либо изменить подпись метода fetchedResultsController в tableVC.h на метод класса, либо изменить вызов в otherVC.m, чтобы использовать экземпляр tableVC, а не сам класс.

Основываясь на вашем примере кода, похоже, что метод fetchedResultsController правильно определен как метод экземпляра, поэтому вам нужно использовать экземпляр tableVC в классе otherVC.

+0

Хорошо. Ведение таблицыVC * tableVC = nil; [tableVC fetchedResultsController]; казалось, получил способ стрелять, поэтому я правильно поставил вопрос. Однако есть ли способ установить FRC на нуль, чтобы я мог его перезагрузить. Это ленивые нагрузки, но поскольку он уже существует, он не переустанавливается. – user1904273

+0

В общем случае, если ваш NSFetchedResultsController не отслеживается (не имеет назначенного делегата), и вы не изменяете предикат, и вы не устанавливаете кеш, тогда все, что вам нужно сделать, это вызов [fetchedResultsController performFetch], за которым следует вызов reloadData в вашем представлении таблицы [self.tableView reloadData]. Если вы используете кеширование, посмотрите [NSFetchedResultsController deleteCacheWithName: cacheName]. Я также рекомендую изучить настройку делегата и использование отслеживания, чтобы представление таблицы всегда обновлялось, когда изменения были внесены в вашу модель. –

+0

Стол VC зарегистрирован как делегат и обновляется при добавлении нового элемента, но по какой-то причине он не обновляется при редактировании элемента, хотя код сохранения идентичен. Кроме того, у детали VC, о которой идет речь, нет таблицы, просто метки и изображения. Я не могу заставить их обновиться. Понимайте ценность MVC, но сумасшедший, что что-то настолько тривиальное настолько сложно в IOS. – user1904273

Смежные вопросы