早上好,錯誤:[DataDisplayViewController - ddvcLoadedRcv]無法識別的選擇器發送到實例
我想請求澄清重新。標題中提到的錯誤消息的具體實例。我認識到這個錯誤已經在&之前討論過很多次了,我已經查看了大約10個這些線程,看看我能否找到我的問題的答案,但我不能這麼想。忍受着我。
我的應用程序使用iPhone來控制在PC上運行的程序的操作。它是根據該程序定製的,而不是使用通用VNC。它使用帶有4個屏幕的tabBarController。與第一個選項卡關聯的viewController啓動「模型」,該模型是與PC上的服務器進行通信的客戶端。第二個和第三個VC具有通過客戶端向服務器發送命令的按鈕。所有的工作都很好。
我的問題是與第四個VC旨在顯示通過客戶端從服務器接收的數據。當客戶端(即模型)接收到顯示數據時,我試圖使用NSNotification(在userinfo中附加一個數據數組)向第四個VC發送消息,告訴它更新其標籤的文本屬性。我的第一次嘗試導致類似於問題標題中的錯誤消息。我推測這是因爲第一個數據發送給它時,第四個VC尚未創建。爲了避免這種情況,我在模型中添加了一個條件,以便它一旦加載就不會發送數據,直到它從第4個VC接收到一條消息。但是,當執行到達發送通知的第4個VC的ViewDidAppear中的行時,標題中會顯示錯誤消息。
同樣,閱讀其他線程,我的結論是,因爲該模型已經出來的內存和4 VC被替換它找不到模型類的選擇。因此它在第四個VC中尋找選擇器並且找不到它。所以,對於那些長時間的前言,我的問題是如何將我的「模型」保留在內存中,以便通知具有適當的目的地。
下面是從顯示通知設置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 VC來實例化模型的一些代碼:
// 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,所以我從來沒有想過要改變它。但是,當我試圖將「self」更改爲VVC_Communication_Module類型的對象時,儘管我已導入.h文件,但x代碼不會公開它。如果有其他人有這個問題,我會回答我自己的問題,以顯示我必須做的事情。 RB – rbwater
當然,您必須導入.h文件,並且您必須在運行時擁有一個實例化對象,並且在添加觀察者時必須具有對該對象的引用。 – thorb65