Доброго утра,Ошибка: [DataDisplayViewController - ddvcLoadedRcv] непризнанным селектор послал к экземпляру
Я хотел бы попросить разъяснения повторно. конкретный экземпляр сообщения об ошибке, указанного в заголовке. Я признаю, что эта ошибка обсуждалась много раз до & Я просмотрел около 10 из этих потоков, чтобы узнать, могу ли я найти ответ на свою проблему, но я не могу так PLS. потерпите меня.
Мое приложение использует iPhone для управления действиями программы, запущенной на ПК. Он настроен для этой программы, а не с использованием обобщенного VNC. Он использует tabBarController с 4 экранами. Элемент viewController, связанный с первой вкладкой, инициирует «модель», которая является клиентом, который взаимодействует с сервером на ПК. Второй и третий VC имеют кнопки, которые отправляют команды на сервер через клиент. Все отлично работает с ними.
Моя проблема заключается в четвертом VC, который предназначен для отображения данных, полученных с сервера через клиента. Когда клиент (т. Е. Модель) получает данные для отображения, я пытаюсь использовать NSNotification (с прикрепленным массивом данных в userinfo), чтобы отправить сообщение четвертому VC, чтобы сообщить ему об обновлении его текстовых свойств. Моя первая попытка привела к сообщению об ошибке, аналогичному сообщению в заголовке вопроса. Я предположил, что это произошло потому, что 4-й VC не был создан во время отправки первых данных. Чтобы этого избежать, я добавил условие в модель, чтобы он не отправлял данные, пока не получит сообщение от 4-го VC после его загрузки. Однако, когда выполнение достигает линии в 4-м VD ViewDidAppear, где отправлено уведомление, я получаю сообщение об ошибке в заголовке.
Снова, читая другие темы, я пришел к выводу, что он не может найти селектор в классе модели, потому что модель ушла из памяти и была заменена 4-м VC. Следовательно, он ищет селектор в 4-м VC и не может его найти. Итак, извиняясь за этот длинный pre-amble, мой вопрос заключается в том, как сохранить свою «модель» в памяти, чтобы уведомление имело подходящее место назначения.
Вот код из 4 VC показывает уведомление настроить и т.д.
// DataDisplayViewController.m
#import "DataDisplayViewController.h"
#import "VVViewController.h"
#import "VVC_Communication_Module.h"
@interface DataDisplayViewController()
@property (nonatomic, strong) NSMutableArray *rideData;
@end
@implementation DataDisplayViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ddvcLoadedRcv) name:@"ddvcLoadedEvent" object:nil];
}
- (void) viewDidAppear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"ddvcLoadedEvent" object:nil];
}
@end
Вот код из модели показывает селектор, который должен получить уведомление.
// VVC_Communication_Module.m
#import "VVC_Communication_Module.h"
#import "VVViewController.h"
#import "DataDisplayViewController.h"
@interface VVC_Communication_Module()
@property (nonatomic, strong) NSArray *itemArray;
@property (nonatomic) BOOL ddvcLoaded;
@end
@implementation VVC_Communication_Module
@synthesize itemArray;
@synthesize ddvcLoaded = _ddvcLoaded;
- (BOOL) ddvcLoaded
{
_ddvcLoaded = NO;
return _ddvcLoaded;
}
- (void) ddvcLoadedRcv:(NSNotification *) notification
{
_ddvcLoaded = YES;
}
@end
Наконец, некоторый код, с 1-го ВК, который создает модель:
// VVViewController.m
#import "VVViewController.h"
#import "DataDisplayViewController.h"
#import "VVC_Communication_Module.h"
@interface VVViewController()
@property (nonatomic, strong) VVC_Communication_Module *moduleRxTx;
@end
@implementation VVViewController
@synthesize moduleRxTx = _moduleRxTx;
- (VVC_Communication_Module *)moduleRxTx
{
if (!_moduleRxTx) _moduleRxTx = [[VVC_Communication_Module alloc] init];
return _moduleRxTx;
}
@end
Спасибо за все, и любая помощь вы можете предложить. RB
Спасибо вам за быстрый ответ. Ты посадил меня на правильный путь. Первоначально я включил двоеточие, но вынул их во время отладки, чтобы увидеть, не изменилось ли это - теперь они вернулись. Однако ключевым моментом было указание на «я». Все примеры, которые я видел при использовании NSNotification, имели addObserver: self, поэтому мне никогда не приходило в голову изменить его. Однако, когда я попытался изменить «я» на объект типа VVC_Communication_Module, x-код не мог бы его отобразить, хотя я импортировал файл .h. Если у кого-то еще есть эта проблема, я отвечу на свой вопрос, чтобы показать, что я должен был сделать. RB – rbwater
, конечно, вы должны импортировать файл .h, и при добавлении наблюдателя вы должны иметь экземпляр объекта во время выполнения и ссылку на этот объект. – thorb65